3

Python のネストされた変数が重複することは予想されますか? 例えば:

for i in range(1,10):
    x = [0xFF for i in range(6)]
    print(i)

期待される結果 (シーケンス) は何ですか? Python 2.7 では、5 が 9 になっています。

4

4 に答える 4

4

表示されるのは、リスト内包表記を使用することの副作用です。リスト内包内の iterator 変数は for ループのものと同じです。これは、リスト内包表記の反復子変数が式自体のローカルではないことを意味します。

例:

>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print x
9

したがって、両方のイテレータ変数名は異なる必要があります。

于 2012-09-05T09:07:02.477 に答える
3

Python にはブロック スコープがありません。そのため、ブロック内で変更した変数は、そのブロックの外に表示されます。クラス、関数、およびモジュールのみがスコープを作成します。

于 2012-09-05T09:07:48.180 に答える
1

irange(6) の最後の要素を指します。つまり5、印刷するとき

リスト内包表記が完了すると、値iは 5 になります。これは、印刷中に得られるものです。

外部ループは range(1,10) 、つまり 9 回実行されます

In [47]: len(range(1,10))
Out[47]: 9
于 2012-09-05T09:05:01.590 に答える
0

変数を宣言すると、値が格納されます。Pythonでは、変数を初期化して値を格納すると、変数が破棄されなくなるまで使用できます。したがってx = 10、ループの内側に書き込むと、ループの外側にxもなります。その変数を削除したい場合は、次のように入力del xします。の値は取得されません。x

于 2012-09-05T09:22:49.763 に答える