0

私は本当にPythonの変数参照を理解していると思っていたので、なぜこのコードが変数「a」を「1」にしないのか混乱しています:

>>> a,b,c = None, None, None
>>> for var, val in zip((a,b,c),[1]):
...     var = val
... 
>>> print a
None
>>> print var
1

ここでPythonが何をしているのか、誰か説明できますか? 「var」と「a」が同じ場所を指していないのはなぜですか?

おまけの質問: 1 ~ 3 個のアイテムを持つことができるリストから 3 つの変数を割り当て、リストが不足している場合に変数を [なし] に設定するエレガントな方法は何ですか?

4

3 に答える 3

6

ここでPythonが何をしているのか、誰か説明できますか?

変数の値を variableに代入valしていますvar。変化していませんa。何が起こっているかを確認するには、次のことを試してください。

>>> a, b, c = None, None, None
>>> print(zip((a,b,c), [1,2,3]))
[(None, 1), (None, 2), (None, 3)]

zipは、変数abおよびcをまったく認識せず、それらがバインドされている値のみを表示します。

Code Like a Pythonistaで Python の変数 (実際の名前) の使用について読んでください。

1 ~ 3 個の項目を持つリストから 3 つの変数を割り当て、リストが不足している場合に変数を [なし] に設定するエレガントな方法は何ですか?

変数を動的に構築しないでください。代わりにリストを使用してください。

vars = (lst + [None] * 3)[:3]

次に、vars[0]などを使用します。または

x, y, z = (lst + [None] * 3)[:3]
于 2012-07-03T14:08:08.453 に答える
2

変数 a、b、c は、 に渡されるとその値に評価されますzip

>>> a,b,c = None, None, None
>>> zip((a,b,c),[1])
[(None, 1)]

次に、あなたのループには、あなたが期待したものはありません:

for var, val in [(None, 1)]:
    #-- here var is bound to the value None

    var = val
    #-- here var is bound to the value 1

    #print val
于 2012-07-03T14:11:51.147 に答える
0

a の値が None である理由は、 に割り当て1たことがないためですa。したがって、 a に値が割り当てられていることを確認する必要があります。

于 2012-07-03T14:08:40.627 に答える