Во многих случаях, и я предполагаю, что этот случай также, _
представляет последнее созданное значение, независимо от типа переменной. Например, пытаясь воспроизвести это в I python, я создал список a
, а затем попытался сослаться на один из элементов через _
. Так как моя последняя созданная переменная была списком, это не удалось:
In [99]: a = [1, 2, 3, 4]
In [100]: a[_]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-100-81d8b9395518> in <module>
----> 1 a[_]
TypeError: list indices must be integers or slices, not list
В вашем for
l oop вы предполагаете, что целевая переменная находится в области действия для всего for
l oop и затем выходит за рамки видимости. Это не вариант. Последнее значение целевого значения в a для l oop не является сборщиком мусора ИЛИ не удаляется.
a = [1, 2, 3]
for _ in range(2):
print(a[_])
a[_]
1 # index 0, points at a value of one.
2 # index 1, points at a value of two.
2 # we have left the for loop, but the _ still points at the
# last value it was associated with, a 1 and thus
# the list indexing expression retrieves a value of two.
Это альтернативный пример, демонстрирующий это явление на работе:
In [109]: for word in ['alpha', 'beta', 'zeta']:
...: print(word)
...:
alpha
beta
zeta
In [110]: word # let's examine word outside the for loop:
Out[110]: 'zeta'