你以为在Python中调用一个变量就像在房间里找东西?不妨看看这个令人抓狂的例子:
x = 10
def outer():
x = 20
def inner():
print(x) # 这个x到底是谁?
return inner
func = outer()
func() # 输出什么?
这不是普通的变量查找,而是一场精心设计的捉迷藏游戏。今天我们将化身代码侦探,破解Python世界的三大空间谜案。
一、变量查找的密室逃脱
Python变量查找遵循LEGB法则,像侦探破案一样逐层搜索:
-
Local(本地):案发第一现场
-
Enclosing(闭包):隔壁房间
-
Global(全局):整栋大楼
-
Built-in(内置):城市基础设施
def crime_scene():
clue = "指纹"
def suspect_room():
clue = "凶器"
def murder_spot():
print(clue) # 找到哪个clue?
return murder_spot
return suspect_room()
detective = cri