Python作用域 - 神奇的变量世界!¶
1. 什么是作用域?让我们一起想象...¶
想象你住在一个大房子里!这个房子有不同的区域: - 后院(全局作用域):所有人都可以玩的地方 - 自己的房间(局部作用域):只有你能玩的地方 - 客厅(嵌套作用域):可以看到后院,但有些规则 - 储物室(内置作用域):Python自带的工具房间
2. 让我们探索不同的区域!¶
2.1. 后院 - 全局作用域¶
# 这些变量在后院,所有人都可以用
house_name = "快乐小屋"
garden_flowers = ["玫瑰", "向日葵", "郁金香"]
def play_in_garden():
print(f"我们在{house_name}的后院玩耍")
print(f"看到了这些花:{garden_flowers}")
# 在任何地方都能看到后院的东西
play_in_garden()
print(f"房子的名字是:{house_name}")
2.2. 自己的房间 - 局部作用域¶
def my_room():
# 这些玩具只能在房间里玩
my_toys = ["积木", "玩具车", "画笔"]
print(f"我的房间里有:{my_toys}")
# 调用函数,进入房间
my_room()
# 这会报错,因为my_toys只能在房间里用
try:
print(my_toys)
except NameError:
print("出了房间就看不到房间里的玩具啦!")
2.3. 客厅 - 嵌套作用域¶
def living_room():
sofa = "大沙发" # 这是客厅里的沙发
def play_area():
# 在游戏区可以看到客厅的东西
toys = ["积木"]
print(f"在{sofa}旁边玩{toys}")
play_area()
# 来客厅玩
living_room()
2.4. 储物室 - 内置作用域¶
# Python的储物室里有很多好用的工具
print(len("Python")) # len是Python储物室里的工具
print(max([1, 2, 3])) # max也是
print(min([4, 5, 6])) # min也是
3. 有趣的作用域游戏¶
3.1. 寻宝游戏¶
treasure = "金币" # 在后院藏了宝藏
def treasure_hunt():
# 可以在函数里找到后院的宝藏
print(f"我找到了:{treasure}")
# 在这个房间里藏了新的宝藏
secret = "钻石"
print(f"房间里还有:{secret}")
# 开始寻宝
treasure_hunt()
# 可以找到后院的宝藏
print(f"后院的宝藏是:{treasure}")
# 但找不到房间里的宝藏
try:
print(secret)
except NameError:
print("房间里的宝藏只能在房间里找到!")
3.2. 魔法城堡游戏¶
def magic_castle():
castle_name = "彩虹城堡" # 城堡的名字
def magic_room():
room_spell = "闪闪发光" # 房间的魔法
print(f"在{castle_name}的魔法房间里:{room_spell}")
def garden_room():
garden_spell = "花花绽放" # 花园的魔法
print(f"在{castle_name}的花园里:{garden_spell}")
# 参观城堡的不同房间
magic_room()
garden_room()
# 游览魔法城堡
magic_castle()
4. 作用域的特殊规则¶
4.1. global关键字 - 带出房间的玩具¶
toy_box = "空的" # 后院的玩具箱
def add_toys():
global toy_box # 告诉Python我们要改变后院的玩具箱
toy_box = "装满玩具"
print(f"玩具箱现在是:{toy_box}")
# 看看玩具箱的变化
print(f"之前的玩具箱:{toy_box}")
add_toys()
print(f"之后的玩具箱:{toy_box}")
4.2. nonlocal关键字 - 客厅的玩具可以带到小房间¶
def playroom():
toys = ["小熊"] # 游戏室的玩具
def add_more_toys():
nonlocal toys # 告诉Python我们要用游戏室的玩具
toys.append("小兔子")
print(f"现在有的玩具:{toys}")
print(f"开始时的玩具:{toys}")
add_more_toys()
print(f"最后的玩具:{toys}")
# 玩玩具游戏
playroom()
5. 小贴士¶
- 记住不同区域的规则:
- 后院(全局):所有人都能用
- 房间(局部):只能在房间里用
- 客厅(嵌套):可以看到外面的东西
-
储物室(内置):Python的工具间
-
使用作用域的好处:
- 每个地方的东西都整整齐齐
- 不同房间的东西不会混在一起
-
可以在不同的房间用相同的名字
-
特别注意:
- 想要改变后院的东西,要用global
- 想要改变客厅的东西,要用nonlocal
- Python的工具(内置函数)要好好使用
记住:Python的作用域就像一个大房子,每个地方都有自己的规则。只要记住这些规则,就能写出整洁又好用的程序啦!