2015-09-22 2 views
-3
def outside(x=1): 
    def printHam(): 
    x = x+1 
    print x 
    return printHam 

myfunc = outside(7) 
myfunc() 

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

Однако это работает

def outside(x=1): 
    def printHam(): 
    print x + 1 
    return printHam 

myfunc = outside(7) 
myfunc() 
+1

Искать любые тысячи вопросов, связанных с «локальной переменной, на которые ссылаются перед назначением» на этом сайте. – BrenBarn

+0

Даже тривиальный запрос получает 861 результат: http://stackoverflow.com/search?q=local+variable+referenced+before+assignment+%5Bpython%5D+is%3Aq Проводили ли вы какие-либо исследования вообще? – jonrsharpe

+0

@BrenBarn я все еще не получаю – Sumit

ответ

1

Поскольку вы назначаете й в первом случае , python будет считать, что x является локальной переменной (по умолчанию). Во втором случае вы не назначаете его, чтобы он проверял глобальную область.

Если вы хотите, чтобы этот пример работал, вы должны пройти внешние х во внутреннюю функцию следующим образом:

def outside(x=1): 
    def printHam(x=x): 
    x = x+1 
    print x 
    return printHam 

Это, как говорится, это кажется ужасно надуманным прецедентом, так что, вероятно, лучшее решение для вашего фактического использования. Но я не могу сказать вам, что это такое, не зная больше о том, что вы пытаетесь сделать.

Смежные вопросы