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

def fun1(param1, *param2):
def fun2(param1, **param2):
def fun3(param1, *param2, **param3)

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

具体而言:

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

def fun(param1, *param2):print(param1)print(param2)
if __name__ == '__main__':fun(1,2,3,4,5)
---------------
out:
1
(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:将多个输入打包成字典输入函数中

def fun2(param1, **param2):print(param1)print(param2)
if __name__ == '__main__':fun2(1,a=2,b=3)
------------------------------
out:
1
{'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)这个顺序,否则程序会报错。

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

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

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

def fun4(a, b):print(a)print(b)if __name__ == '__main__':input = [1, 2]fun4(*input)
-----------------------
out:
1
2

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

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

def fun4(**kwargs):print(kwargs['a'])print(kwargs['b'])for key, value in kwargs.items():print(key)print(value)if __name__ == '__main__':input = {'a':1,'b':2}fun4(**input)
-------------------
1
2
a
1
b
2

python中def func(*args, **kwargs)相关推荐

  1. pythonfunc函数的功能,python函数中def func(*args)这里*的作用是什么?

    python函数中def func(*args)这里*的作用是什么? mip版  关注:160  答案:3  悬赏:0 解决时间 2021-02-23 21:54 已解决 2021-02-23 03: ...

  2. python中def func是什么意思_Python的函数参数详解

    原标题:Python的函数参数详解 前言 Python中函数的参数可以分为两大类形参和实参~ def func(x, y): # x, y 就是形参 print(x, y) func(2, 3) # ...

  3. Python中def()->int奇怪的语法和*args与**args

    看源码有一些奇奇怪怪的写法,顺便把以前用的整理整理 首先解释*args, **kwargs这两个,先看个测试代码 def func(*args, **kwargs):print(args)print( ...

  4. python中可变参数args传入函数时储存的类型是,Python函数可变参数定义及其参数传递方式实例详解...

    本文实例讲述了Python函数可变参数定义及其参数传递方式.分享给大家供大家参考.具体分析如下: python中 函数不定参数的定义形式如下: 1.func(*args) 传入的参数为以元组形式存在a ...

  5. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  6. python中def fun(a、b=200)_python中的函数的参数和可变参数

    最近在搞python的过程中需要用到给函数传可变参数..所以去网上找前人的帖子学习了一下 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函 ...

  7. python中可变参数args传入函数时储存的类型是_[转载]Python中函数的参数定义和可变参数*args与**args...

    Python中函数的参数定义和可变参数 *args与**args区别 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和** ...

  8. python中def函数字典_python中的函数def和函数的参数

    ''' 函数: 1.减少代码重用性 2.易维护 3.可扩展性强 4.类型function 定义函数: def 函数变量名(): 函数的调用: 1.函数名加括号 2.函数如果没被调用,不会去执行函数内部 ...

  9. python中def函数中的参数_python中的函数def和函数的参数

    ''' 函数: 1.减少代码重用性 2.易维护 3.可扩展性强 4.类型function 定义函数: def 函数变量名(): 函数的调用: 1.函数名加括号 2.函数如果没被调用,不会去执行函数内部 ...

最新文章

  1. Symfony笔记之--控制器的快捷方法
  2. linux主机怎么建站,linux主机建站
  3. module ‘imgaug.augmenters‘ has no attribute ‘Resize‘
  4. linux中export与source的作用
  5. es6 --- 使用yield*命令遍历完全二叉树
  6. python 核心编程第5章(习题)
  7. Ubuntu扩大boot空间
  8. 安全整数和 Number.isSafeInteger()
  9. php 检查txt中全角大写字母的个数
  10. HTML 实现扫雷游戏
  11. 软考中级软件设计师--6.UML
  12. 文本智能处理与RPA领军企业达观数据宣布完成5.8亿元C轮融资
  13. 解决 Minimum supported Gradle version is 5.1.1. Current version is 4.6
  14. python使用pywinauto驱动微信客户端实现公众号爬虫
  15. oa系统需要的服务器配置,oa办公系统需要服务器配置
  16. 命名规范 (C++)
  17. html实训QQ音乐官网首页制作
  18. jadx反编译程序未响应
  19. 手把手教做Excel直方图
  20. 功率半导体芯片是什么_LED日光灯与传统日光灯之间有什么区别和优势呢?

热门文章

  1. java获取不重复订单号,Java 生成永不重复的订单号
  2. 领悟《观音心经》后的空寂感与现实世界的有机结合
  3. Win10激活失败并提示错误代码0xC004C003的解决方法
  4. 大学课程 | 基于WINDLX的系统结构实验
  5. l2范数求导_机器学习中的范数规则化之(一)L0、L1与L2范数
  6. Java Map排序详解
  7. 解决搜狗截图屏幕放大问题
  8. Vue路由传参相关面试题
  9. 电脑修复提速命令整理集合
  10. Linux 6安装kde桌面,centos6.3光盘安装KDE桌面环境