UnboundLocalError при использовании + =, но не добавлять список

python list append

165 просмотра

2 ответа

Я не совсем понимаю разницу между следующими двумя похожими кодами:

def y(x):
    temp=[]
    def z(j):
        temp.append(j)
    z(1)
    return temp

звонит y(2)возвращается[1]

def y(x):
    temp=[]
    def z(j):
        temp+=[j]
    z(1)
    return temp

звонок y(2)возвращается UnboundLocalError: local variable 'temp' referenced before assignment. Почему +оператор генерирует ошибку? Спасибо

Автор: 3c. Источник Размещён: 12.11.2019 09:03

Ответы (2)


9 плюса

Решение

Ответьте на заголовок, разница между "+" и "добавлением":

[11, 22] + [33, 44,] 

дам тебе:

[11, 22, 33, 44]

а также.

b = [11, 22, 33]
b.append([44, 55, 66]) 

дам тебе

[11, 22, 33 [44, 55, 66]] 

Ответ на ошибку

Это потому, что когда вы делаете присвоение переменной в области, эта переменная становится локальной для этой области и скрывает любую переменную с аналогичным именем во внешней области

Проблема здесь temp+=[j]равна temp = temp +[j]. Переменная temp читается здесь до ее назначения. Вот почему это дает эту проблему. Это на самом деле описано в FAQ по питону.

Для дальнейших чтений, нажмите здесь . :)

Автор: Jay Geeth Размещён: 08.12.2015 04:22

3 плюса

Это UnboundLocalErrorпроисходит потому, что, когда вы делаете присвоение переменной в области, эта переменная автоматически рассматривается Python как локальная для этой области и скрывает любую переменную с аналогичным именем в любой внешней области.

В этой appendфункции вы не делаете назначение как таковое , и, следовательно, нет ошибки области действия.

Автор: Ayush Размещён: 08.12.2015 04:29
32x32