1.函数的传参
动态传参
*args 定义一个函数时,*所有的位置参数聚合到一个元祖
**kwargs **将实参角度所有的关键字参数聚合成了一个字典
def func(*args,**kwargs) 万能参数
2.*的魔性用法
形参中 => 聚合
函数执行 => 打散
def func(*args,**kwargs):
print(args)
print(kwargs)
l1=[1,2,3,4]
l2=[5,6,7,8]
func(*l1,*l2)
func(**{"name":"王新磊"},**{"hobby":"唱跳rap篮球"})
函数外 => 处理剩余元素
a,b,*c = [1,2,3,4,5]
a=1 b=2 c=3,4,5
a,*c,b = [1,2,3,4,5]
a=1 b=5 c=2,3,4
a,*c = range(5)
a=0 c=1,2,3,4
a,*c,b = (1,2,3,4,5)
a=1 b=5 c=2,3,4
3.形参角度的最终顺序
位置参数,*args,默认参数,仅限关键字参数,**kwargs
4.从空间角度研究函数
全局名称空间:py文件运行时开辟的,存放的是执行的py文件(除去函数内部)的所有变量与值(地址)的对应关系。整个py文件结束之后,才会消失。
临时(局部)名称空间:函数执行时,在内存中临时开辟的一个空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失。
内置名称空间:input,print等内置函数
5.取值顺序加载顺序
加载顺序:内置名称空间 => 全局名称空间 => 局部名称空间(函数执行时)
取值顺序:局部名称空间 => 全局名称空间 => 内置名称空间(就近原则)
6.作用域
全局作用域:全局名称空间,内置名称空间
局部作用域:局部名称空间
7.内置函数
globals() => 全局作用域所有的内容
locals() => 当前位置的变量与值得对应关系
8.高阶函数(嵌套函数)
def fun2():
print(2)
def func3():
print(6)
print(4)
func3()
print(8)
print(3)
fun2()
print(5)