2011-01-14 32 views
7
var_list = [one, two, three] 
num = 1 
for var in var_list: 
    var = num 
    num += 1 

का उपयोग करके सूची में चर के मान निर्दिष्ट ऊपर मुझे एक त्रुटि है कि 'एक' मौजूद नहीं है देता है। क्या आप इस तरह से असाइन नहीं कर सकते? मैं सूची में प्रत्येक var के लिए एक incrementing संख्या असाइन करना चाहता हूँ।एक पाश

उत्तर

8

अजगर चर मूल्यों के लिए नाम हैं। वे वास्तव में मूल्यों को "शामिल" नहीं करते हैं।

for var in var_list: कारणों 'var' बदले में सूची के प्रत्येक तत्व के लिए एक नाम बनने के लिए,। लूप के अंदर, var = num सूची को प्रभावित नहीं करता है: इसके बजाय, यह सूची तत्व के लिए नाम होने के लिए var का कारण बनता है, और इसके बजाय वर्तमान में नाम num के लिए नाम होने लगते हैं।

इसी प्रकार, जब आप सूची बनाते हैं, अगर one, two और three पहले से ही नहीं कर रहे हैं मूल्यों के लिए नाम है, तो आप उन्हें उस तरह उपयोग नहीं कर सकते, क्योंकि आप मूल्यों उन है कि की एक सूची बनाने के लिए पूछ रहे हैं नाम (और फिर उस सूची के लिए नाम होने के लिए var_list का कारण बनें)। ध्यान दें कि सूची में वास्तव में मान नहीं हैं, या तो: यह संदर्भ, यानी उन्हें साझा करता है।

4

नहीं, यह ऐसा काम नहीं करता है।

आप कोशिश कर सकते हैं:

one, two, three = range(1, 4) 

यह काम एक से अधिक काम में चर को परिभाषित करते हुए। जैसे आप a, b = 1, 2 का उपयोग कर सकते हैं। यह range को अनलॉक कर देगा और इसके मान एलएचएस वैरिएबल को असाइन करेगा, इसलिए यह आपके लूप की तरह दिखता है (सिवाय इसके कि यह काम करता है)।

एक अन्य विकल्प (जो मैं एक असली कार्यक्रम ... में सिफारिश नहीं होगा) एक कार्यकारी बयान में चर नाम पेश करने का होगा:

names = ['one', 'two', 'three'] 
num = 1 
for name in names: 
    exec "%s = %s" % (name, num) 
    num += 1 
print one, two, three     
+0

यह काम करता है, लेकिन इस सवाल का जवाब क्यों पर एक छोटे से कम है ओपीएस रास्ता * काम नहीं करता है। – John

+0

सच है कि। जैसा कि अन्य ने पहले से ही इसे कवर किया है, मैं समझाऊंगा कि यह इस पर आधारित क्यों काम करता है। – TryPyPy

2

एक चर जब तक आप इसे बनाने के अस्तित्व में नहीं है । बस एक चर का संदर्भ देने के लिए पर्याप्त नहीं है। जब आप [one, two, three] करते हैं तो आप one, two और three वेरिएबल से पहले चर का संदर्भ दे रहे हैं।

8

आप globals() में निर्मित समारोह के साथ वैश्विक चर के शब्दकोश का उपयोग कर सकते हैं। शब्दकोश, चाबी के लिए तार का उपयोग करता है, जिसका अर्थ है, तो आप इस तरह, रन-टाइम में तारों के रूप में दिए गए नाम के साथ चर बना सकते हैं:

>>> var_names = ["one", "two", "three"] 
>>> count = 1 
>>> for name in var_names: 
... globals()[name] = count 
... count += 1 
... 
>>> one 
1 
>>> two 
2 
>>> three 
3 
>>> globals()[raw_input()] = 42 
answer 
>>> answer 
42 

Recommended reading

+0

बेशक, यह सीमित उपयोगिता है। –