作用域 LEGB:为什么循环变量在函数外还能用

LEGB 查找顺序

Local → Enclosing → Global → Built-in。

x = "global"

def outer():
    x = "enclosing"
    def inner():
        print(x)      # enclosing
    inner()

延迟绑定

funcs = [lambda: i for i in range(3)]
print([f() for f in funcs])   # [2, 2, 2]

要固定值就写成 lambda i=i: i。