变量的作用域:
在python程序中,我们变量的创建,更改以及删除都是在一个内存的命名空间中进行的,我们称这个命名空间为作用域
简单来说:作用域就是变量能使用的范围。
在python中定义的变量并不是在任何位置都可以使用的,它能使用的范围取决于变量定义的位置。
局部作用域:在函数体内部定义的变量都会产生一个新的局部作用域。
比如def模块中定义的,lambda中定义的变量。
嵌套作用域:函数体中又嵌套了一个函数,外函数的作用域称之为嵌套作用域
全局作用域:在当前.py文件中定义变量,定义在函数体之外的。
内置作用域:系统定义的,每个.py文件都可以使用的。
变量的划分:
局部变量:定义在函数体内部的变量我们称之为局部变量,
作用的范围:当前函数的函数体
全局变量:定义在.py文件中,并且定义在函数体外部的边变量我们称之为全局变量
作用范围:当前整个.py文件
内置变量:系统定义的
作用范围:项目中所有的.py文件
局部变量的生成以及销毁的时间:
当函数执行的时候生成,当函数执行结束则该变量销毁。
全局变量
变量搜索的规则:
先搜索局部作用域>嵌套作用域>全局作用域>内置作用域
若这几个作用域中都不存在此变量,这时候则报错。
global 关键字
使用global可以声明此变量为全局变量,在声明之后,可以在函数体内部
更改我们的全局变量,
若不声明的话,注意这个就不是更改,而是在函数内部创建了一个同名的局部变量而已。
结论:
在python中只有我们的模块,类以及函数的定义会产生新的作用域,而其他的语句块
比如if/else,try/except,while/for这些语句不会产生新的作用域,它的意思是
在这些语句块中定义的变量在外部是可以使用的。
for x in range(10):
pass
print(x)
num1 = 30
def outer():
num1 = 400
def func():
num = 20
global num1
num1 = 300
print(num1)
return func
outer()()
print(num1)
回调函数: