1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # python-day32-20170110: 4 5 6 # 关于*args所能接收的参数 7 8 # 这种接收的是位置参数,可变长 9 def func1(*args): 10 print(args,type(args)) 11 12 # 传入位置参数可以被args所接收,以元组的形式来保存 13 func1(1,2,3,4) # (1, 2, 3, 4) <class 'tuple'> 14 15 # 传入的位置参数也可以是元组,所传入的元组也是新生成的元组中的一个元素 16 func1((1,2,3,5),'a','b') # ((1, 2, 3, 5), 'a', 'b') <class 'tuple'> 17 18 # 传的元组前面加*后,遍历该元素中的每个元素添加到新元组 19 func1(*(1,2,3,5),'a','b') # (1, 2, 3, 5, 'a', 'b') <class 'tuple'> 20 21 # 注意 *args不能接收关键字参数 22 # func1(x=3) # 报错 23 24 25 # 传入字典,字典也做为args元组中的一个元素而已 26 func1({"k1":"v1","k2":"v2"}) # ({'k1': 'v1', 'k2': 'v2'},) <class 'tuple'> 27 28 # 所传入的字典前面加*后,则会把字典中的每个键做为元组的元素 29 func1(*{"k1":"v1","k2":"v2"}) # ('k1', 'k2') <class 'tuple'> 30 31 # 字典前面加双** ,相当于关键字参数,而*args则接收不了关键字参数。 32 # func1(**{"k1":"v1","k2":"v2"}) # 报错。 33 34 35 print("-----------------------------------------------------") 36 37 # 关于**kwargs所接收的参数 38 39 def func2(**kwargs): 40 print(kwargs,type(kwargs)) 41 42 43 # **kwargs 无关接收位置参数 44 # func2(1,2,3) # 报错 45 46 # **kwargs可接收关键字参数,则是以字典的形式来进行保存 47 func2(x=1,y=2) # {'x': 1, 'y': 2} <class 'dict'> 48 49 # **kwargs 无法接收元组作为参数 50 # func2((1,2,3,4)) # 报错 51 52 # 元组前面加**也会报错 53 # func2(**(1,2,3,4)) # 报错TypeError: __main__.func2() argument after ** must be a mapping, not tuple 54 55 # **kwargs 无法拉直接接收字典作为参数 56 # func2({'x': 1, 'y': 2}) 57 58 # 字典前面加**后可以被kwargs所接收 59 func2(**{'x': 1, 'y': 2}) # {'x': 1, 'y': 2} <class 'dict'> 60 61 # 综上我们可知**kwargs所能接收到的是字典前面加**或者是关键字参数 62 func2(**{'x': 1, 'y': 2},z = 88) # {'x': 1, 'y': 2, 'z': 88} <class 'dict'>
标签:func2,python,args,元组,参数,kwargs,接收 From: https://www.cnblogs.com/i5ba/p/17310369.html