Python第十天

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 名称空间 :命名空间

 

上一篇:46.函数的参数总结


下一篇:刷题(七)