*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就一个机制,闭包的所在的临时名称空间不会随着函数的执行完毕而消失。