मैं आमतौर पर निम्नलिखित पैटर्न (this question में उल्लेख किया) का उपयोग करें:संक्षिप्त रूप (..., ** स्थानीय लोगों())
a=1
s= "{a}".format(**locals())
मुझे लगता है कि यह एक शानदार तरीका आसानी से पढ़ने योग्य लिखने के लिए है कोड।
a="1"
b="2"
c="{a}+{b}".format(**locals())
d="{c} is a sum".format(**locals())
#d=="1+2 is a sum"
बहुत जल्द, कोड X.format(**locals())
साथ सताया जाता है:
कभी कभी यह जटिल तार के सृजन "modularize" से "श्रृंखला" स्ट्रिंग स्वरूपों के लिए उपयोगी है, क्रम में। इस समस्या को हल करने के लिए, मैं एक लैम्ब्डा बनाने की कोशिश की:
f= lambda x: x.format(**locals())
a="1"
b="2"
c= f("{a}+{b}")
d= f("{c} is a sum")
लेकिन यह एक KeyError फेंकता है, के बाद से locals()
लैम्ब्डा के स्थानीय लोगों के हैं।
मैं भी केवल पिछले स्ट्रिंग पर प्रारूप को लागू करने की कोशिश की:
a="1"
b="2"
c="{a}+{b}"
d="{c} is a sum".format(**locals())
#d=="{a}+{b} is a sum"
लेकिन यह काम नहीं करता है, के बाद से अजगर केवल एक बार स्वरूपों।
def my_format(string, vars):
f= string.format(**vars)
return f if f==string else my_format(f, vars)
लेकिन मैं सोच रहा हूँ: वहाँ यह करने के लिए एक बेहतर तरीका है अब, मैं एक समारोह है कि बार-बार स्वरूपों जब तक यहां और भी कुछ भी नहीं करना लिख सकता है?
आप शायद स्थानीय लोगों को ग्लोबल्स को ओवरराइड करना चाहते हैं। वर्तमान में, आपके पास यह दूसरा रास्ता है, क्योंकि बाद में तर्क जीतने के लिए तर्क। – Collin
अच्छा बिंदु ... मैं वह परिवर्तन करूंगा। –