我刚刚开始学习python,但我对python如何处理作用域感到有些困惑。我知道全局,封闭和局部变量在哪里(至少我认为我是:D)。 我在学习Python第5版中阅读了以下段落:
当在函数中使用非限定名称时,Python最多搜索四个范围-本地(L)范围,然后是任何封闭(E)def和lambda的本地范围,然后是全局(G)范围,以及然后是内置(B)范围-并停在第一个找到该名称的位置。如果在此搜索过程中未找到名称,Python将报告错误。 (第448页)
现在我不明白为什么示例1有效,而示例2无效。
def box2():
def box1():
total = price + tip
print(total)
price = 1
tip = 1
box1()
box2()
def box1():
total = price + tip
print(total)
def box2():
price = 1
tip = 1
box1()
box2()
谢谢您的时间。
答案 0 :(得分:0)
该段的重要内容是:
Python搜索...任何封闭的(E)defs的本地范围...
“包含”是指它的定义位置:
box1
被定义为内部 box2
(即在box2
的范围内),因此box2
是一个封闭范围的box1
。box1
被定义为外部 box2
(即在box2
范围内不是),因此{ {1}} 不是封闭范围的box2
。应归功于UnholySheep,Barmar,尤其是juanpa.arrivillaga,因为在评论中解释得很好