一直以为pyhton中if、for、with代码块中的变量不能在代码块外面使用,但是实际上是可以的。因为在Python中,没有块级作用域,也就是说类似if语句块、for语句块、with上下文管理器等等是不存在作用域概念的,它们等同于普通的语句。例如:
在代码中并未在if
语句之前定义var_2
变量,仅在if
中进行赋值,但是却可以在if
之外进行print
操作。
- python的作用域一共有四层:
局部作用域 L (Local)-->>闭包函数外的函数中 E ( Enclosing ) -->>全局作用域 G ( Global ) -->> 内建作用域 B (Built-in)
。记成LEGB
。- Python以
L –> E –> G –>B
的规则查找变量
- 示例:
x = int(1.1) # 内建作用域,查找int函数
global_var = 0 # 全局作用域
def outer():
out_var = 1 # 闭包函数外的函数中
def inner(): # 闭包函数
inner_var = 2 # 局部作用域