2011-01-14 9 views

答えて

8

Pythonの変数は、の値のの名前です。彼らは本当に値を「含む」わけではありません。

for var in var_list:は、 'var'をリストの各要素の名前にします。ループの内部でvar = numはリストに影響しません。代わりに、varがリスト要素の名前でなくなり、代わりにnumの現在の名前の名前になります。

onetwothreeは、すでに値の名前ではありません場合は、リストを作成するときに、それらを持っている値のリストを作成するために求めているので、あなたは、そのようにそれらを使用することはできません。同様

、 (その後、var_listがそのリストの名前になります)。リストには実際に値が含まれていないことに注意してください。つまり、参照する、つまり共有します。

4

いいえ、それはそのようには機能しません。

あなたは試すことができます:

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

この作品の複数の割り当てで変数を定義することによって。ちょうどあなたがa, b = 1, 2を使用できるように。これにより、rangeが展開され、その値がLHS変数に割り当てられますので、ループのように見えます(ただし、動作する点を除きます)。

(私は実際のプログラム...にはお勧めしません)別のオプションは、exec文で変数名を導入することです:あなたはそれを作成するまで

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

これは動作しますが、この答えは理由について少し短いです:辞書は意味、あなたはこのように、実行時に文字列として指定された名前を持つ変数を作成することができ、キーの文字列を使用していますOPsの方法*は機能しません。 – John

+0

それは本当です。他の人がすでにそれをカバーしているので、私はこれがなぜそれに基づいて動作するのか説明します。 – TryPyPy

2

変数が存在しません。単に変数を参照するだけでは作成できません。 [one, two, three]を実行すると、変数onetwo、および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

もちろん、これは有用性には限りがあります。 –