2012-07-19 17 views
58

संभव डुप्लिकेट:
How do I do variable variables in Python?एक चर नाम के रूप में एक स्ट्रिंग चर का उपयोग करना

मैं एक स्ट्रिंग में डाला गया साथ एक चर है और मैं एक नया पर आधारित है कि चर को परिभाषित करना चाहते स्ट्रिंग।

foo = "bar" 
foo = "something else" 

# What I actually want is: 

bar = "something else" 
+14

शायद आप इसे नहीं चाहते हैं। आप ऐसा करने की कोशिश क्यों कर रहे हैं? – JBernardo

+2

नहीं, आप नहीं करते हैं। आपको 'exec' का उपयोग करने का कारण यह है कि' स्थानीय() 'संशोधनों का समर्थन नहीं करता है। 'स्थानीय()' संशोधनों का समर्थन नहीं करता है क्योंकि यह कार्यान्वयन को अधिक जटिल और धीमा कर देगा और ** ** कभी अच्छा विचार नहीं है –

+1

इसी प्रकार की पोस्ट: http://stackoverflow.com/questions/1373164/ How-do-i-do-variable-variables-in-python – Kartik

उत्तर

107

आप उस के लिए exec उपयोग कर सकते हैं:

>>> foo = "bar" 
>>> exec(foo + " = 'something else'") 
>>> print bar 
something else 
>>> 
+52

+1 क्योंकि उसने प्रश्न का उत्तर दिया (जैसा कि यह एक बुरा विचार हो सकता है)। – mgalgs

+0

यह सबसे अच्छा जवाब है, लेकिन यह मेरे लिए काम नहीं कर रहा है। शायद यह मेरे दायरे के कारण है। यह आपके उदाहरण में एक साधारण फ़ाइल में काम करता है, लेकिन मैं स्थानीय चर सेट करने की कोशिश कर रहे वर्ग की विधि में हूं, और वे सेट नहीं किए जा रहे हैं। – sudo

91

आप इसके बजाय किसी शब्दकोश का उपयोग कर बहुत खुश हो जाएगा:

my_data = {} 
foo = "hello" 
my_data[foo] = "goodbye" 
assert my_data["hello"] == "goodbye" 
+22

यह सवाल का समाधान नहीं लगता है। – dnsmkl

+2

हां। यह सहायक हो सकता है, लेकिन यह नहीं था कि ओपी क्या पूछ रहा था। – sudo

+19

मुझे यह देखकर खुशी हुई कि उत्तर अभी भी यहां है। मुझे लगता है कि हम स्टैक ओवरफ्लो पाठकों पर भरोसा कर सकते हैं कि वे खुद के लिए न्याय करें कि क्या कोई जवाब उनकी आवश्यकताओं के अनुरूप है या नहीं। यह उत्तर "परिवर्तनीय चर" प्रदान नहीं करता है, यह सच है। लेकिन मैं आपको गारंटी देता हूं कि 99% लोग ढूंढ रहे हैं जो शब्दकोश ढूंढने के लिए खुश होंगे। –

59

आप उपयोग कर सकते हैं setattr

name= 'varname' 
value= 'something' 

setattr(self, name, value) #equivalent to: self.varname= 'something' 

print self.varname 
#will print 'something' 

लेकिन , क्योंकि आप inf चाहिए नया चर प्राप्त करने के लिए ऑब्जेक्ट ऑर्म करें, मुझे लगता है कि यह केवल कक्षाओं के अंदर काम करता है।

+8

सही, यह केवल कक्षाओं के अंदर काम करता है। – sudo

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