*args 和**kwargs作为形参

*args 和**kwargs作为形参被称为不定长参数,用来处理超出必备参数部分的参数。注意:args和kwargs可以修改为其它变量名。

必备参数就是在定义函数时传入的形参,在调用函数时,传入的参数须以正确的顺序传入,传入的数量必须和声明时的一样,不然会出现语法错误。

以下为必备参数语法错误实例:

def student(name, age):
  print(name, age) student()
"""
Traceback (most recent call last):
File "D:/test.py", line 5, in <module>
student()
TypeError: student() missing 2 required positional arguments: 'name' and 'age'
""" student("张三", 11, 99)
"""
Traceback (most recent call last):
File "D:/test.py", line 5, in <module>
student("张三",11, 99)
TypeError: student() takes 2 positional arguments but 3 were given """

当传入的参数超出必备参数时,若不想出现语法错误,可以使用不定长参数来接收这些多余的参数,若多余的参数类型为值(值为自定义说法,指的是没有”=“连接,单独的一个值,这个值可以是任何类型str,list,dict等),则被*args以元组类型接收

若多余的参数类型为键值(键值为自定义说法,指的是一个参数用”=“连接一个值,这个值可以是任何类型str,list,dict等),则被**kwargs以字典类型接收。

def student(name, age, *args, **kwargs):
print("必备参数:", name, age)
print("多余的“值”参数:", args)
print("多余的“键值”参数:", kwargs) student("张三", 11, 22, [33, 44], {"语文": 55}, score=66, evaluation={"数学": "优"}) """
输出结果如下:
必备参数: 张三 11
多余的“值”参数: (22, [33, 44], {'语文': 55})
多余的“键值”参数: {'score': 66, 'evaluation': {'数学': '优'}}
"""

*args 和**kwargs作为实参

接收到这些多余的参数,怎么传递给其它函数用呢?传递时是使用带星的还是不带星呢?

先看不带*的实例:

def summary_student(name, *score, **evaluation):
print("-"*20)
print("必备参数:", name)
print("多余的“值”参数:", score)
print("多余的“键值”参数:", evaluation) def student(name, age, *args, **kwargs):
print("args变量的值:", args)
print("kwargs变量的值:", kwargs)
summary_student(name, age, args, kwargs) student("张三", 11, 22, [33, 44], {"语文": 55}, score=66, evaluation={"数学": "优"}) """
输出结果如下:
args变量的值: (22, [33, 44], {'语文': 55})
kwargs变量的值: {'score': 66, 'evaluation': {'数学': '优'}}
--------------------
必备参数: 张三
多余的“值”参数: (11, (22, [33, 44], {'语文': 55}), {'score': 66, 'evaluation': {'数学': '优'}})
多余的“键值”参数: {}
"""

从上面实例多余的参数分析,多余参数传递给其它函数使用时,若不带*,实际上就是把变量args整个元组当成一个值传递给其它函数使用,同理kwargs也会被当做一个值处理。

在看下带*的实例:

def summary_student(name, *score, **evaluation):
print("-"*20)
print("必备参数:", name)
print("多余的“值”参数:", score)
print("多余的“键值”参数:", evaluation) def student(name, age, *args, **kwargs):
print("args变量的值:", args)
print("kwargs变量的值:", kwargs)
summary_student(name, age, *args, **kwargs) student("张三", 11, 22, [33, 44], {"语文": 55}, score=66, evaluation={"数学": "优"}) """
输出结果如下:
args变量的值: (22, [33, 44], {'语文': 55})
kwargs变量的值: {'score': 66, 'evaluation': {'数学': '优'}}
--------------------
必备参数: 张三
多余的“值”参数: (11, 22, [33, 44], {'语文': 55})
多余的“键值”参数: {'score': 66, 'evaluation': {'数学': '优'}}
"""

从上面实例多余的参数分析,多余参数传递给其它函数使用时,若带*,其它函数处理时,全部按原传入参数的类型处理,原传入参数为”值“类型就让其它函数的*args接收,原传入参数为"键值"类型就让其它函数的**kwargs接收。

也就是说 *args 和**kwargs作为实参时,具有拆包的作用。

最新文章

  1. transformClassesWithDexForDebug
  2. Python 五个常用模块资料 os sys time re built-in
  3. [DFNews] Blackbag发布MacQuisition 2013 R2
  4. ubuntu 14.04 64位安装bigbluebutton
  5. 【原创】angularjs1.3.0源码解析之scope
  6. &lt;input&gt;标签中获得鼠标与否的样式变化——js实现
  7. google proto buffer安装和简单示例
  8. linux上很方便的上传下载文件工具rz和sz
  9. 【ecos学习1】wmware运行redboot[方法一]--脚本实现配置
  10. xtrabackup在线备份主库,搭建slave,使用gtid模式
  11. JSP标准标签库(JSTL)--国际化标签库 fmt
  12. 洛谷 P1129 解题报告
  13. IIS与ASP.NET对请求的处理
  14. 在nginx上用FastCGI解析PHP
  15. L252
  16. O&#39;Reilly总裁提姆-奥莱理:什么是Web 2.0
  17. 最大生成树——LCA
  18. 【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
  19. oracle 导入报错:field in data file exceeds maximum length
  20. wikioi 1380 没有上司的舞会 树形dp

热门文章

  1. 【Matlab】find函数用法
  2. 从一次解决Nancy参数绑定“bug”开始发布自己的第一个nuget包(上篇)
  3. 学习笔记--html篇(2)
  4. JavaScript中的NaN
  5. 转:苹果iphone APP界面设计尺寸官方版
  6. ciscn_2019_es_7
  7. python简单爬虫的实现
  8. CF1145F Neat Words 题解
  9. redis hash操作 list列表操作
  10. Shell脚本--数值比较组合判断