动态参数,作用域,闭包
*args
接收的是所有的位置参数
**kwargs
接收的是所有的关键字参数
def func1(*args, **kwargs): #*聚合成元祖 **聚合成字典 print(*args) # *吧元祖分散 print(kwargs) # kwargs不能分散 func1(1, 2, 3, x=4, y=5, z=6)
*的魔性用法
def func3(*args,**kwargs): # 函数的定义 *用意是聚合。 print(args) print(kwargs) l1 = [1, 2, 3] l2 = [11, 21, 32] s1 = 'fjskalgf' s2 = 'fjskrrrf' tu1 = (1, 2, 3) tu2 = (11, 22, 33) func3(*l1, *tu1, *s2)
作用域
当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个
临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做临时名称空间。
全局作用域:内置名称空间,全局名称空间
局部作用域:局部名称空间
global
1,声明一个全局变量。
2,更改一个全局变量。
nonlocal
1,不能改变一个全局变量。
判断name的先后顺序
name = "lala" def func(): def func1(): name ="feifei" def func2(): nonlocal name name = "minzai" def func3(): global name name = "xiaohui" print(name) name = "huihui" func1() print(name) func2() print(name) func3() print(name) print(name) func() print(name)
闭包
内层函数对外层函数非全局变量的引用就叫闭包
判断是不是闭包 函数名.__closure__
闭包有什么用?
当执行一个函数时,如果解释器判断此函数内部闭包存在,这样
Python就一个机制,闭包的所在的临时名称空间不会随着函数的执行完毕而消失。