Python3 में प्रिंटफ की तरह प्रिंट कैसे करें?


125

पायथन 2 में मैंने इस्तेमाल किया:

print "a=%d,b=%d" % (f(x,n),g(x,n))

मैंने कोशिश की:

print("a=%d,b=%d") % (f(x,n),g(x,n))

11
%हमेशा एक स्ट्रिंग ऑपरेटर रहा है, printबयान से संबंधित नहीं । उदाहरण के लिए, आप एक स्ट्रिंग बना सकते हैं s="a=%d,b=%d"%(f(x,n),g(x,n)), फिर उस स्ट्रिंग को प्रिंट करें print s
चेपनर

जवाबों:


207

Python2 में, printएक कीवर्ड था जिसने एक स्टेटमेंट पेश किया था:

print "Hi"

Python3 में, printएक फ़ंक्शन है जिसे लागू किया जा सकता है:

print ("Hi")

दोनों संस्करणों में, %एक ऑपरेटर है जिसे बाईं ओर एक स्ट्रिंग की आवश्यकता होती है और एक मूल्य या मूल्यों का एक ट्यूल या dictदाईं ओर की ओर एक मैपिंग ऑब्जेक्ट (जैसे ) होता है।

तो, आपकी लाइन इस तरह दिखनी चाहिए:

print("a=%d,b=%d" % (f(x,n),g(x,n)))

इसके अलावा, पायथन 3 और नए के लिए सिफारिश -स्टाइल {}फ़ॉर्मेटिंग के बजाय -स्टाइल फ़ार्मेटिंग का उपयोग करना है %:

print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))

अजगर 3.6 एक और स्ट्रिंग-स्वरूपण प्रतिमान का परिचय देता है: एफ-स्ट्रिंग्स

print(f'a={f(x,n):d}, b={g(x,n):d}')

14
या: print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) जहां यह उदाहरण दिखाता है कि आप प्रिंटफ-शैली संशोधक का उपयोग कैसे कर सकते हैं और अभी भी कीवर्ड का उपयोग कर सकते हैं ।
fbicknel

2
@ एरा, इसके कुछ बड़े फायदे हैं। ऐसा नहीं है जिसमें से कम से कम आप एक ही प्रारूप को केवल कई बार या ऑर्डर से बाहर का संदर्भ दे सकते हैं: "{1}, {1}, {0}, और {1}" .format ("अंडे", "स्पैम") = = "स्पैम, स्पैम, अंडे और स्पैम"
Dr Xorile

53

formatविधि का उपयोग करने के लिए सबसे अनुशंसित तरीका है । इसके बारे में यहाँ और पढ़ें

a, b = 1, 2

print("a={0},b={1}".format(a, b))

28

ओ'रेली के पाइथन कुकबुक से सरल प्रिंटफ () फ़ंक्शन ।

import sys
def printf(format, *args):
    sys.stdout.write(format % args)

उदाहरण आउटपुट:

i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14

हे ... PRINTऔर FORMAT...? समय में वापस FORTRAN के दिनों के लिए 60 + साल :)
Skeeve

1
ओ'रेली की रसोई की किताब का लिंक मर चुका है।
इदेओग्राम

22

इनलाइन इंटरपोलेशन के लिए पायथन 3.6 ने एफ-स्ट्रिंग्स की शुरुआत की। क्या अच्छा है यह भी है कि यह सिंटैक्स विस्तारित किया जाता है ताकि प्रारूप विनिर्देशक को प्रक्षेप के साथ भी अनुमति दी जा सके। जब मैं इस पर काम कर रहा था (और इस पुराने सवाल पर आया था!):

print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')

पीईपी 498 में विवरण है। और ... यह अन्य पालतू जानवरों में प्रारूप विनिर्देशक के साथ मेरे पालतू पेशाब को हल करता है - निर्दिष्ट करने के लिए अनुमति देता है कि खुद को अभिव्यक्ति हो सकती है! वाह! देखें: प्रारूप विनिर्देशक


2
नोट: यह चर में तारों को इंजेक्ट करने का सबसे अच्छा तरीका है।
रोटारटी



2

क्योंकि आपकी कोष्ठक के %बाहर print(...)है, आप अपने चर को अपने कॉल के परिणाम में सम्मिलित करने का प्रयास कर रहे हैं printprint(...)रिटर्न None, इसलिए यह काम नहीं करेगा, और आपके द्वारा पहले से ही अपने टेम्पलेट को प्रिंट करने वाले छोटे से मामले में भी इस समय और समय यात्रा द्वारा ब्रह्मांड के कानूनों द्वारा निषिद्ध किया जा रहा है, जो हम निवास करते हैं।

वह पूरी चीज़ जिसे आप प्रिंट करना चाहते हैं, जिसमें %और उसके ऑपरेंड शामिल हैं, को आपके कॉल के अंदर होना चाहिए print(...), ताकि स्ट्रिंग को प्रिंट होने से पहले बनाया जा सके।

print( "a=%d,b=%d" % (f(x,n), g(x,n)) )

मैंने इसे स्पष्ट करने के लिए कुछ अतिरिक्त स्थान जोड़े हैं (हालांकि वे आवश्यक नहीं हैं और आमतौर पर अच्छी शैली नहीं मानी जाती हैं)।


2

अन्य शब्द अजगर में अनुपस्थित हैं ... मुझे आश्चर्य है! बेस्ट कोड है

def printf(format, *args):
    sys.stdout.write(format % args)

इस फॉर्म की वजह से \ n प्रिंट नहीं होने देता है। अन्य सभी नहीं। इसलिए प्रिंट खराब ऑपरेटर है। और आपको विशेष रूप में लिखने की ज़रूरत है। ऊपर फ़ंक्शन में कोई नुकसान नहीं है। यह प्रिंटफ फ़ंक्शन का एक मानक सामान्य रूप है।


1
आप प्रिंट में तुच्छता से बच सकते हैं। मूल्य जोड़ने के बाद बस "," जोड़ें।
हज्जाज़मैन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.