-
作用域有哪几种
代码块的定义:模块、类、函数,交互式输入的每条命令,脚本文件,脚本命令
名称绑定在一个代码块中,则为该代码块的局部变量,除非声明global或nonlocal ,如果名称绑定在模块中,则为全局变量(模块代码块的变量即为局部变量又为全局变量),如果一个变量在一个代码块中被使用但不是在其中定义,则为自由变量
作用域定义了一个代码块中名称的可见性
-
有哪几种?
- 局部作用域 Local 简称L
- 闭包函数外的函数中的作用域 Enclosing 简称E
- 全局作用域 global 简称 G
- 内置作用域
Bulit-in
简称 B
-
变量在作用域的查找顺序
当一个变量名被使用时,由离它最近的作用域来解析,一个在闭包中的变量,它的作用域的查找顺序为 L -> E ->G ->B
-
可能会出现的问题
- 当一个名称完全找不到时,将会引发
NameErro
r异常
def fun(): print(name) fun() Traceback (most recent call last): File "D:\python\程序包\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<input>", line 2, in fun NameError: name 'name' is not defined
-
当前作用域为函数作用域,某变量名指向一个局部变量,而此变量在被使用前尚未绑定到特定值,将会引发
**UnboundLocalError**
错误e.g.
var = 100 def func(): var = var + 1 #此时使用var将var视为局部变量 func() Traceback (most recent call last): File "D:\python\程序包\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<input>", line 2, in func UnboundLocalError: local variable 'var' referenced before assignment
var = 100 def func(): print(var) #var = 1 var为局部变量 此时使用时 var尚未绑定特定值 var = 1 func() Traceback (most recent call last): File "D:\python\程序包\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<input>", line 2, in func UnboundLocalError: local variable 'var' referenced before assignment
- 当一个名称完全找不到时,将会引发
-
05-23
3028
08-19
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交