day22
目录
可变长参数
*
*形参
用元组加收多余的位置实参
约定俗成形参名为 *args
def f1(*args): # 调用函数时,有多少个参数就接受多少个
res = 0
for num in args:
res += num
return res
res = sum_self(1,2,3,4)
print(res) # 10
*实参
打散列表,然后以位置实参传给位置形参
def func(x,y,z,*args):
print(x,y,z,args)
func(1,*(1,2),3,4)
# 1 1 2 (3,4)
**
**形参
用字典接收多余的关键字实参
约定俗成形参名为 **kwargs
def func(**kwargs)
print(kwargs)
func(a=5) # 接收关键字实参 ('a':5)
**实参
打散字典,然后以关键字实参传给位置形参
def func(x,y,z,**kwargs):
print(x,y,z,kwargs)
func(1,3,4,*{'a':1,'b':2}) # 1 3 4 {'a':1,'b':2}
*形参 **形参
接收所有多余的参数
函数的对象
作为函数的返回值
函数对象 == 函数名,变量对象可以做的函数对象也可以
四大功能:
1.引用
2.当作容器类元素
3.当作参数传给一个函数
4.当作函数的返回值
函数嵌套
def 函数名():
def 函数名():
pass
外面不能引用内部定义的函数
名称空间与作用域
名称空间
内置名称空间
存放python解释器子弟啊的名字,如int、float、len
生命周期:在解释器启动时生效,在解释器关闭时失效
全局名称空间
出了内置和局部名称空间之外,其余都存放在全局名称空间
生命周期:在文件执行时生效,在文件执行结束后失效
局部名称空间
用于存放函数调用期间函数产生的名
生命周期:在文件执行时调用期间生效,在函数执行结束失效
执行顺序
内置--》局部-》全局
作用域
作用域关系在函数定义阶段就固定死了,与函数的调用无关
全局作用域
全局作用域的x和局部作用域的x没有半毛钱关系,可变数据类型除外
局部作用域
局部作用域1的x和局部作用域2的x没有半毛钱关系
global
局部可以修改全局的
nonlocal
局部的修改外层局部的