Python のネストされた変数が重複することは予想されますか? 例えば:
for i in range(1,10):
x = [0xFF for i in range(6)]
print(i)
期待される結果 (シーケンス) は何ですか? Python 2.7 では、5 が 9 になっています。
Python のネストされた変数が重複することは予想されますか? 例えば:
for i in range(1,10):
x = [0xFF for i in range(6)]
print(i)
期待される結果 (シーケンス) は何ですか? Python 2.7 では、5 が 9 になっています。
表示されるのは、リスト内包表記を使用することの副作用です。リスト内包内の iterator 変数は for ループのものと同じです。これは、リスト内包表記の反復子変数が式自体のローカルではないことを意味します。
例:
>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print x
9
したがって、両方のイテレータ変数名は異なる必要があります。
Python にはブロック スコープがありません。そのため、ブロック内で変更した変数は、そのブロックの外に表示されます。クラス、関数、およびモジュールのみがスコープを作成します。
i
range(6) の最後の要素を指します。つまり5
、印刷するとき
リスト内包表記が完了すると、値i
は 5 になります。これは、印刷中に得られるものです。
外部ループは range(1,10) 、つまり 9 回実行されます
In [47]: len(range(1,10))
Out[47]: 9
変数を宣言すると、値が格納されます。Pythonでは、変数を初期化して値を格納すると、変数が破棄されなくなるまで使用できます。したがってx = 10
、ループの内側に書き込むと、ループの外側にx
もなります。その変数を削除したい場合は、次のように入力del x
します。の値は取得されません。x