#python #scope #disassembly #cpython
#python #область #разборка #cpython
Вопрос:
У меня есть тривиальная функция, которая возвращает свой аргумент, а значение получается с помощью LOAD_FAST
инструкции cpython.
def function1(n):
return n # LOAD_FAST for n -- what I expect
dis.dis(function1)
2 0 LOAD_FAST 0 (n)
2 RETURN_VALUE
Однако добавление лямбда-выражения в тело функции приводит к получению значения с использованием LOAD_DEREF
.
def function2(n):
return n # LOAD_DEREF for n -- this is surprising
lambda: n # LOAD_DEREF for n -- what I expect
dis.dis(function2)
2 0 LOAD_DEREF 0 (n)
2 RETURN_VALUE
Disassembly of <code object <lambda> at 0x..., file "...", line 3>:
3 0 LOAD_DEREF 0 (n)
2 RETURN_VALUE
Почему поиск n
изменяется в более высокой области в зависимости от того n
, используется ли она в более низкой (зависимой) области?