जवाबों:
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}')
print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) जहां यह उदाहरण दिखाता है कि आप प्रिंटफ-शैली संशोधक का उपयोग कैसे कर सकते हैं और अभी भी कीवर्ड का उपयोग कर सकते हैं ।
formatविधि का उपयोग करने के लिए सबसे अनुशंसित तरीका है । इसके बारे में यहाँ और पढ़ें
a, b = 1, 2
print("a={0},b={1}".format(a, b))
ओ'रेली के पाइथन कुकबुक से सरल प्रिंटफ () फ़ंक्शन ।
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 + साल :)
इनलाइन इंटरपोलेशन के लिए पायथन 3.6 ने एफ-स्ट्रिंग्स की शुरुआत की। क्या अच्छा है यह भी है कि यह सिंटैक्स विस्तारित किया जाता है ताकि प्रारूप विनिर्देशक को प्रक्षेप के साथ भी अनुमति दी जा सके। जब मैं इस पर काम कर रहा था (और इस पुराने सवाल पर आया था!):
print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')
पीईपी 498 में विवरण है। और ... यह अन्य पालतू जानवरों में प्रारूप विनिर्देशक के साथ मेरे पालतू पेशाब को हल करता है - निर्दिष्ट करने के लिए अनुमति देता है कि खुद को अभिव्यक्ति हो सकती है! वाह! देखें: प्रारूप विनिर्देशक ।
सरल उदाहरण:
print("foo %d, bar %d" % (1,2))
एक सरल।
def printf(format, *values):
print(format % values )
फिर:
printf("Hello, this is my name %s and my age %d", "Martin", 20)
क्योंकि आपकी कोष्ठक के %बाहर print(...)है, आप अपने चर को अपने कॉल के परिणाम में सम्मिलित करने का प्रयास कर रहे हैं print। print(...)रिटर्न None, इसलिए यह काम नहीं करेगा, और आपके द्वारा पहले से ही अपने टेम्पलेट को प्रिंट करने वाले छोटे से मामले में भी इस समय और समय यात्रा द्वारा ब्रह्मांड के कानूनों द्वारा निषिद्ध किया जा रहा है, जो हम निवास करते हैं।
वह पूरी चीज़ जिसे आप प्रिंट करना चाहते हैं, जिसमें %और उसके ऑपरेंड शामिल हैं, को आपके कॉल के अंदर होना चाहिए print(...), ताकि स्ट्रिंग को प्रिंट होने से पहले बनाया जा सके।
print( "a=%d,b=%d" % (f(x,n), g(x,n)) )
मैंने इसे स्पष्ट करने के लिए कुछ अतिरिक्त स्थान जोड़े हैं (हालांकि वे आवश्यक नहीं हैं और आमतौर पर अच्छी शैली नहीं मानी जाती हैं)।
अन्य शब्द अजगर में अनुपस्थित हैं ... मुझे आश्चर्य है! बेस्ट कोड है
def printf(format, *args):
sys.stdout.write(format % args)
इस फॉर्म की वजह से \ n प्रिंट नहीं होने देता है। अन्य सभी नहीं। इसलिए प्रिंट खराब ऑपरेटर है। और आपको विशेष रूप में लिखने की ज़रूरत है। ऊपर फ़ंक्शन में कोई नुकसान नहीं है। यह प्रिंटफ फ़ंक्शन का एक मानक सामान्य रूप है।
%हमेशा एक स्ट्रिंग ऑपरेटर रहा है,printबयान से संबंधित नहीं । उदाहरण के लिए, आप एक स्ट्रिंग बना सकते हैंs="a=%d,b=%d"%(f(x,n),g(x,n)), फिर उस स्ट्रिंग को प्रिंट करेंprint s।