local frame can't use name bound in its parent frame
在编程课程中遇到了Python环境概念,并有以下问题。
例如:
(1)
1 2 3 4 5 6 | >>>def f(x): def g(y): return x - y return g >>> f(2)(3) -1 |
(2)
1 2 3 4 5 6 7 8 9 10 | def f(x): def g(y): x = x - y return x return g >>> f(2)(3) Traceback (most recent call last): File"<stdin>", line 1, in <module> File"<stdin>", line 3, in g UnboundLocalError: local variable 'x' referenced before assignment |
(3)
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> def f(x): def g(y): if x > y: x = x - y else: x = y - x return x return g >>> f(2)(3) Traceback (most recent call last): File"<stdin>", line 1, in <module> File"<stdin>", line 3, in g UnboundLocalError: local variable 'x' referenced before assignment |
示例(1)可以从其父框架引用"x",但(2)和(3)不能引用。我不知道为什么。如果(2)由于分配给非本地名称而失败,为什么(3)在第3行给出错误,而不是第4行?
每当您在python中"引用"一个名称时,都会隐式地执行非限定名称查找。它们遵循legb规则:系统按顺序在不同的位置查找名称的绑定
搜索一旦找到所搜索名称的绑定,搜索就会停止。如果名称绑定在这些位置中的多个,则列表中较早的位置被称为阴影。
在第一个代码示例中,
在您的第二个示例中,
通过查看
在第三个例子中,出现了完全相同的问题:在第4行,编译器发现在L/
错误出现在第3行,因为这是查找失败的行。
综上所述,在
如果您在python 3中,可以在内部函数