跳转至

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. 小贴士

  1. 记住不同区域的规则
  2. 后院(全局):所有人都能用
  3. 房间(局部):只能在房间里用
  4. 客厅(嵌套):可以看到外面的东西
  5. 储物室(内置):Python的工具间

  6. 使用作用域的好处

  7. 每个地方的东西都整整齐齐
  8. 不同房间的东西不会混在一起
  9. 可以在不同的房间用相同的名字

  10. 特别注意

  11. 想要改变后院的东西,要用global
  12. 想要改变客厅的东西,要用nonlocal
  13. Python的工具(内置函数)要好好使用

记住:Python的作用域就像一个大房子,每个地方都有自己的规则。只要记住这些规则,就能写出整洁又好用的程序啦!

进一步学习