1形参角度
万能参数
*的魔性用法
仅限关键字参数
形参的最终顺序
2名称空间
全局名称空间 局部
加载顺序 取值顺序
作用域
3函数的嵌套
4内置函数 globals locals
5关键字 nonlocal global
1 形参角度
万能参数
1动态就收的位置参数:*args 约定俗称
函数定义时 *代表聚合 他将所有的位置参数聚合成一个元组,
赋值给了args
急需要一种形参 可以接受所有的实参
def eat(*args):
print('woqingnichi:%s,%s,%s,%s,%s,%s' % (args))
eat('zhengyaogao','zheng','c','d','g','r')
#函数计算输入数字的和的功能
def sum1(*args):
sum=0
for i in args:
sum=sum+i
return sum
print(sum1(1,2,3,4,5,6))
2动态接受的关键字参数 **kwargs
函数的定义时 **将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs
def func(**kwargs):
print(kwargs)
func(name='sb',age=14,sex='ladyboy')#{'name': 'sb', 'age': 14, 'sex': 'ladyboy'}
形参角度的参数顺序
# def func(*args,a,b,sex='nan'):
# print(a,b)
# func(1,2,3,4)
# def func(a,b,*args,sex='nan'):
# print(a,b)
# print(args)
# print(sex)
# func(1,2,3,4)
# 1 2
# (3, 4)
# nan
# def func(a,b,sex='nan',*args):
# print(a,b)
#
# print(sex)
# print(args)
# func(1,2,3,4)
# #1 2
# 3
# (4,)
这三个中*args参数在位置参数后 关键字参数前 否则结果错误或报错
**kwargs必须放在最后
def func(a,b,*args,sex='nan',**kwargs):
print(a,b)
print(args)
print(sex)
print(kwargs)
func(1,2,3,4,name='sb',age=20)
##1 2
(3, 4)
nan
{'name': 'sb', 'age': 20}
形参角度的第四个参数:仅限关键字参数
def func(a,b,*args,sex='nan',c,**kwargs):
print(a,b)
print(args)
print(sex)
print(c)
print(kwargs)
func(1,2,3,4,name='sb',age=20,c='666')
形参角度最终的顺序:位置参数 *args 默认参数 仅限关键字参数 **kwargs
*的魔性用法
*在函数调用时 *代表打散
def func(*args):
print(args)
func([1,2,3],[22,33])
func(*[1,2,3],*[22,33])(1, 2, 3, 22, 33)*代表把列表打散传入动态接受的位置参数中是 形成元组
*放在可迭代对象前面
比较下面这两个函数 结果不同 注意调用时是一个* 还是两个**
def func(*args,**kwargs):
print(args)
print(kwargs)
# func([1,2,3],[22,33])
# func(*[1,2,3],*[22,33])
func({'name':'taibai'},{'age':18})
#执行结果 实参全部传给了*args 并聚合成元组 **kwargs没有实参传入,形成空字典
({'name': 'taibai'}, {'age': 18})
{}
def func(*args,**kwargs):
print(args)
print(kwargs)
# func([1,2,3],[22,33])
# func(*[1,2,3],*[22,33])
func(**{'name':'taibai'},**{'age':18})==func(name='taibai',age='18')
#执行结果 实参全部传给了**kwargs 并聚合成字典 *args 没有实参传入,形成空元组
()
{'name': 'taibai', 'age': 18}
*总结:
在函数定义时 *代表聚合 *args把传入的实参聚合成一个元组 **kwargs把传入的实参聚合成一个字典
在函数调用式 * **代表打散 *args 代表把传入的可迭代对象打散 最后形成一个元组
**kwargs代表把传入的实参打散 最后形成一个字典
2 名称空间 :命名空间