4

Я изучаю Python и натолкнулся на пример, который я не совсем понимаю. В официальном учебнике, следующий код Дан:Область применения параметра по умолчанию в Python

i = 5 

def f(arg=i): 
    print(arg) 

i = 6 
f() 

Исходя из C++, имеет смысл интуитивно для меня, что это будет печатать 5. Но я хотел бы также понять техническое объяснение: «Значение по умолчанию оцениваются в точке определения функции в определяющей области ». Что здесь означает «определяющая область»?

+2

* «Определение области действия» * означает область действия функции, т.е. См. Также: http://stackoverflow.com/q/1132941/3001761 – jonrsharpe

+0

«Определение области видимости»: на Python вы можете иметь функцию локально ограниченного действия, то есть функцию внутри функции. Ближе всего к C++ - это лямбда, которые являются новыми в C++ (у Python есть также lambdas). – cdarke

+0

Короткий ответ: значения по умолчанию сохраняются как кортеж в 'f.func_defaults', его значение равно' (5,) 'в вашем коде. – gdlmx

ответ

1
1. i = 5 
2. 
3. def f(arg=i): 
4.  print(arg) 
5. 
6. i = 6 
7. f() 

В # 1, i = 5 оценивается, а переменная и ее значение добавляются в область видимости.

В строке 3 оценивается объявление функции. На этом этапе также вычисляются все аргументы по умолчанию. i имеет значение 5, поэтому значение arg по умолчанию - 5 (а не символическое i).

После i изменение значения в строке 6, arg уже 5, поэтому оно не изменяется.

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