2013-07-04 8 views
7

का उपयोग कर निम्न स्ट्रिंग निर्माण बयान पर विचार करें प्रारूपण:पायथन: एक स्ट्रिंग चर नाम प्लेसहोल्डर

s="svn cp %s/%s/ %s/%s/" % (root_dir, trunk, root_dir, tag) 

का उपयोग करते हुए चार %s भ्रामक हो सकते हैं, इसलिए मैं चर नाम का उपयोग करना पसंद:

s="svn cp {root_dir}/{trunk}/ {root_dir}/{tag}/".format(**SOME_DICTIONARY) 

जब root_dir, tag और trunk कोका उपयोग करके कक्षा के दायरे में परिभाषित किया गया है अच्छी तरह से काम करता है:

s="svn cp {root_dir}/{trunk}/ {root_dir}/{tag}/".format(**self.__dict__) 

लेकिन जब चर स्थानीय कर रहे हैं, वे एक शब्दकोश में परिभाषित नहीं कर रहे हैं, इसलिए मैं बजाय स्ट्रिंग संयोजन का उपयोग करें:

s="svn cp "+root_dir+"/"+trunk+"/ "+root_dir+"/"+tag+"/" 

मैं इस पद्धति काफी भ्रमित लगता है , लेकिन मुझे इन-लाइन स्थानीय चर का उपयोग करके स्ट्रिंग बनाने का कोई तरीका नहीं पता है।

वैरिएबल स्थानीय होने पर वे चर नामों का उपयोग कर स्ट्रिंग कैसे बना सकते हैं?

अद्यतन: locals() फ़ंक्शन का उपयोग करके चाल चल रही थी।

ध्यान दें कि स्थानीय और ऑब्जेक्ट चरों को मिलाकर अनुमति है! उदाहरण के लिए,

s="svn cp {self.root_dir}/{trunk}/ {self.root_dir}/{tag}/".format(**locals()) 

उत्तर

16

आप locals() उपयोग कर सकते हैं समारोह

s="svn cp {root_dir}/{trunk}/{root_dir}/{tag}/".format(**locals()) 

संपादित करें:

अजगर 3.6 जब से तुम string interpolation उपयोग कर सकते हैं:

s = f"svn cp {root_dir}/{trunk}/{root_dir}/{tag}/" 
+1

धन्यवाद, पूरी तरह से 'स्थानीय() 'भूल गए। –

+0

ध्यान दें कि '{a}' प्रारूप (** स्थानीय()), '{a}' प्रारूप (ए = ए) और '{0}' प्रारूप (ए) 450ns, 410 और 215 सम्मानित समय पर हैं । (ठीक है यह एनएस है ...) – comte

1

आप s="svn cp {root_dir}/{trunk}/ {root_dir}/{tag}/".format(**locals()) की कोशिश की?

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