2011-01-30 15 views
12

क्या यह करने के लिए एक अच्छा मुहावरा है: print "%s is a %s %s that %s" % (name, adjective, noun, verb)तारों में आसानी से चर का विस्तार करने के लिए मैं पायथन का उपयोग कैसे करूं?

मैं के प्रभाव के लिए कुछ करने के लिए सक्षम होना चाहते हैं:

बजाय

अजगर 2 के लिए print "{name} is a {adjective} {noun} that {verb}"

उत्तर

20
"{name} is a {adjective} {noun} that {verb}".format(**locals()) 
  • locals() (एक शब्दकोश के रूप में) वर्तमान नाम स्थान के लिए एक संदर्भ देता है।
  • **locals() कीवर्ड तर्कों में शब्दकोष को अनपैक करता है (f(**{'a': 0, 'b': 1})f(a=0, b=1) है)।
  • .format()"the new string formatting" है, जो कि बहुत अधिक तरीके से कर सकता है (उदाहरण के लिए {0.name} पहले स्थितित्मक तर्क के नाम विशेषता के लिए)।

वैकल्पिक रूप से, string.template (फिर से, स्थानीय लोगों के साथ आप एक निरर्थक {'name': name, ...} dict शाब्दिक से बचने के लिए चाहते हैं)।

+3

अधिक जानकारी और विकल्पों के लिए: http://docs.python.org/library/stdtypes.html#string-formatting – Harmen

+0

@ हायरम: +1 मैं वास्तव में उस लिंक की तलाश में था, लेकिन पीईपी पहले पाया गया ... होना चाहिए मेरी खोज एल्गोरिदम में कुछ दोष। – delnan

+1

एक फ़ंक्शन में स्थानीय() को पास करना आमतौर पर एक बहुत बुरा विचार है। यह पैरामीटर रेंगने की ओर जाता है, जहां यह कहना असंभव है कि वास्तव में किस चर के साथ पारित किया जाना है और जो वास्तव में स्थानीय हैं। –

4

कार्य करें:

print name,'is a',adjective,noun,'that',verb 

अजगर 3 ऐड कोष्ठक के लिए:

print(name,'is a',adjective,noun,'that',verb) 

यदि आपको इसे किसी स्ट्रिंग में सहेजने की आवश्यकता है, तो आपको + ऑपरेटर के साथ मिलना होगा और आपको रिक्त स्थान डालना होगा। print पैरामीटर के अंत में पिछली कॉमा होने तक सभी , पर एक स्थान डालें, जिस स्थिति में यह नई लाइन से गुजरता है।

स्ट्रिंग वर को सहेजने के लिए:

result = name+' is a '+adjective+' '+noun+' that '+verb 
+0

ध्यान दें कि Pyhon 2 में, यह कुछ तार के बजाय एक टपल मुद्रण करता है;) (बस कोष्ठक ड्रॉप) – delnan

+0

फिक्स्ड धन्यवाद delnan। –

5

उपयोग string.Template

>>> from string import Template 
>>> t = Template("$name is a $adjective $noun that $verb") 
>>> t.substitute(name="Lionel", adjective="awesome", noun="dude", verb="snores") 
'Lionel is a awesome dude that snores' 
+0

बहुत बढ़िया।Flattery आपको * हर जगह * – Lionel

+0

जो कुछ भी लेता है, है ना? :) – bgporter

संबंधित मुद्दे