当前位置:   article > 正文

python中def func(*args, **kwargs)

func(*args, **kwargs)

在python的函数中经常能看到输入的参数前面有一个或者两个星号,例如:

  1. def fun1(param1, *param2):
  2. def fun2(param1, **param2):
  3. def fun3(param1, *param2, **param3)

*args, **kwargs 其实都是用来将任意个数的参数导入到python函数中。

具体而言:

1、*args:将多个输入打包成元组输入函数中

  1. def fun(param1, *param2):
  2. print(param1)
  3. print(param2)
  4. if __name__ == '__main__':
  5. fun(1,2,3,4,5)
  6. ---------------
  7. out:
  8. 1
  9. (2, 3, 4, 5)

分析:

(1) 由于形参param1只能接收一个实参,所以param=1被导入函数fun中

(2) 剩下的输入2,3,4,5被打包成元组赋给param2,所以*param2前面的*号表示这是一个元组,可以理解为是一个标志,便于编译器理解。如果没有这个*号,编译器会默认将数值2赋给param2,而不是(2,3,4,5)

注意:

(1) 在子函数中,param2就变成了独立的变量了,不需要*号作为标志。可以作为元组正常索引。

(2) 由上例知道*args是可变长度的,这也是其优点之一

2、**kwargs:将多个输入打包成字典输入函数中

  1. def fun2(param1, **param2):
  2. print(param1)
  3. print(param2)
  4. if __name__ == '__main__':
  5. fun2(1,a=2,b=3)
  6. ------------------------------
  7. out:
  8. 1
  9. {'a': 2, 'b': 3}

分析:

(1) 由于形参param1只能接收一个实参,所以param=1被导入函数fun中

(2) 剩下的输入a=2,b=3 被打包成字典赋给param2,所以**param2前面的*号表示这是一个字典,可以理解为是一个标志,便于编译器理解。

注意:

(1) 在子函数中,param2就变成了独立的变量了,不需要**号作为标志。可以作为字典正常索引。

(2) 由于**kwargs是字典类型,所以实参在输入的时候,要有字典所需要的key-value即键值对,不能单单输入数值

(3) 由上例知道**kwargs是可变长度的,这也是其优点之一

3、例子

注意点:参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。

  1. def fun3(a, b=9, *args, **kwargs):
  2. print(a)
  3. print(b)
  4. print(args)
  5. print(kwargs)
  6. if __name__ == '__main__':
  7. fun3(1, 2, 3, 4, c=5, d=6, e=7)
  8. --------------------------------
  9. out:
  10. 1
  11. 2
  12. (3, 4)
  13. {'c': 5, 'd': 6, 'e': 7}

4、主函数和子函数中的不同作用

上述的单星号用于子函数的输入,这里用于主函数中输入实参的操作中,作用是解压参数列表:

  1. def fun4(a, b):
  2. print(a)
  3. print(b)
  4. if __name__ == '__main__':
  5. input = [1, 2]
  6. fun4(*input)
  7. -----------------------
  8. out:
  9. 1
  10. 2

注意:子函数的形参个数要与解压之后数据的长度保持一致

同理,**kwargs也有类似用法,但是由于字典有key-value对,所以用法稍微有些不同。不同点在于:主函数中**用来解压,子函数中**用来做字典的标志。不同位置含义不同

  1. def fun4(**kwargs):
  2. print(kwargs['a'])
  3. print(kwargs['b'])
  4. for key, value in kwargs.items():
  5. print(key)
  6. print(value)
  7. if __name__ == '__main__':
  8. input = {'a':1,'b':2}
  9. fun4(**input)
  10. -------------------
  11. 1
  12. 2
  13. a
  14. 1
  15. b
  16. 2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/544298
推荐阅读
相关标签
  

闽ICP备14008679号