• 预备
  • 基础语法
  • 容器类型
  • 函数
  • 面向对象
  • 输入输出
  • 进程控制
  • 线程控制
  • 正则表达式
  • 网络编程
  • 图形界面
  • 常见问题
  • API 帮助手册

  • 设置

1483

7 分钟

#作用域

Python 中存在作用域的概念,也就是变量的有效范围,Python 中所有 代码块 都是一个单独的作用域。

代码块内的创建的变量只在其范围内有效,称作 局部(local)变量

最外层代码块的作用域称为 全局(global)作用域,全局作用域的变量称作 全局变量

与大多数编程语言不同,Python 没有块级作用域,即条件、循环、模式匹配等代码块都是所在函数的作用域。

例如:

def attack(attack_power:float, defense_power:float) -> None: # damage 是 attack 函数内的局部变量 damage:float = attack_power * ( 1 - defense_power / (defense_power + 100)) # 返回伤害 return damage # 在 attack 外不存在 damage 这个变量,因此会出错 print(f"伤害为 {damage}")
Loading...

形式参数也是函数内部的局部变量

内层作用域作为外层作用域的一部分,可以访问外层作用域的变量:

value:int = 233 def func(): print(f"value 的值为 {value}") func()
Loading...

但如果在内层赋值一个外层作用域同名的变量,将创建一个内层作用域的局部变量,而非修改外层变量的值,这样的局部变量被称作 影子(shadow) 变量:

value:int = 233 def func(): value = 100 # 创建了局部变量,而不是修改外层变量的值 print(f"内层 value 的值为 {value}") func() print(f"外层 value 的值为 {value}")
Loading...

如果要在内层作用域修改外层变量的值,需要使用 nonlocalglobal 关键字标记变量:

  • nolocal 向外查找一层作用域,但外层不能是全局作用域
  • gobal 查找全局作用域
# 全局变量 value:int = 233 def outer_func(): # main 的局部变量 value:int = 666 def inner_func(): nonlocal value # 是外层的变量 value = 100 # 修改外层变量的值 print(f"inner_func 中 value 的值为 {value}") inner_func() print(f"outer_func 中 value 的值为 {value}") outer_func() print(f"全局中 value 的值为 {value}")
Loading...

创建于 2025/5/4 23:37:15

更新于 2025/5/13 14:58:40