Python Подчеркнуть внутренний список - PullRequest
1 голос
/ 29 марта 2020

Я понимаю, что подчеркивания используются для ряда случаев, таких как одноразовые переменные в python.

Недавно я наткнулся на следующий пример:

a = [1, 2, 5, 3]
a[_]

Теперь вторая строка возвращает 2. Что здесь происходит? РЕДАКТИРОВАТЬ:

В Jupyter Notebook этот следующий пример должен работать:

a = [1, 2, 3]

for _ in range(2):
    print(a[_])

a[_]

Это выводит:

1
2
2

Но, конечно, _ в a [_] должен быть вне области здесь?

1 Ответ

3 голосов
/ 29 марта 2020

Во многих случаях, и я предполагаю, что этот случай также, _ представляет последнее созданное значение, независимо от типа переменной. Например, пытаясь воспроизвести это в 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'
...