Python参数传递及收集机制原理解析


Posted in Python onJune 05, 2020

python参数传递时,主要有位置参数和关键字参数。

1. 位置参数:顾名思义,参数的位置顺序很重要,因为是直接根据位置赋值的。

def func1(a, b):
  print(a,b) # 位置参数,位置顺序很重要
func1(1,2)

Python参数传递及收集机制原理解析

2. 关键字参数:首先使得位置不那么重要了,毕竟参数一多,有些人记不住位置也很正常;其次更重要的是可以提供初始值。

def func2(c=1, d=2):
  print(c,d) # 关键字参数,1. 使得位置不那么重要;2. 可提供初始值
func2()  #使用初始值
func2(100,200) #关键字参数也可用位置参数的传递形式
func2(c=100,d=200) #变换位置
func2(d=200,c=200)

Python参数传递及收集机制原理解析

3. 位置参数和关键字参数混合时,位置参数必须全部在关键字参数的前面。

def func3(a, b, c=1):
  print(a,b,c) # 混合使用时,位置参数必须在前面,否则程序会不知道位置参数对应的值是什么
func3(1,2,100)
func3(1,2,c=100)

Python参数传递及收集机制原理解析

4. 通过单星号 '*',收集位置参数,形成元组,但使用的时候也是有序的。

p = (1,2,)
def func4(*para): # 存多个参数,位置参数收集形成元组
  print(para)
func4(*p)  #传递的也是元组形式
func4(*(1,2,))

Python参数传递及收集机制原理解析

5. 通过双星号 '**',收集关键字参数,形成字典

arg = {'c':1,'d':2}
def func5(**args): # 存多个参数,关键字参数收集形成字典
  print(args)
  print(args['c'])
func5(**arg)  #传递形式一
func5(**{'c':1,'d':2}) # 二,或者显式传递字典

Python参数传递及收集机制原理解析

6. 位置参数和单星号 '*' 收集参数的混合:单星号 '*' 表示收集没有对应位置参数的其他位置参数

def func6(a, b, *para): # 混合位置参数,*表示收集没有对应位置参数的其他位置参数,即从前排到后,多余的位置参数
  print(a,b)
  print('para:',para)
func6(1,2,3,4,5)

Python参数传递及收集机制原理解析

7. 关键字参数和双星号 '**' 收集参数的混合:同理双星号 '**' 表示收集没有对应关键字参数的其他关键字参数

def func7(c=1, d=2, **args): # 混合关键字参数,**表示收集没有对应关键字参数的其他关键字参数,即多余的关键字参数
  print(c,d)
  print('args:',args)
func7(1,d=2,e=3,f=4)

Python参数传递及收集机制原理解析

8. 位置参数、关键字参数混合单星号收集参数、双星号收集参数:

def func(a, b, c=1, d=2, *ee, **ff): #混合关键字参数和位置参数:*和** 分别收集多余的位置参数和关键字参数
  print(a,b,c,d)
  print(ee) #元组形式使用
  print(ff) #字典形式使用
# func(100,200,300,400,c=500,d=600,e=700,f=800) # TypeError: func() got multiple values for argument 'c',原因是关键字参数也可以按照位置参数传递形式赋值
func(100,200,c=500,d=600,e=700,f=800)
func(100,200,300,400,500,600,e=700,f=800) #从前到后多余的参数分别进入元组(单星号)和字典形式(双星号)

TypeError: func() got multiple values for argument:因为关键字参数也是可以像位置参数那样直接传递的。

Python参数传递及收集机制原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之赋值,简单也不简单
Sep 24 Python
python简单程序读取串口信息的方法
Mar 13 Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
python实现按任意键继续执行程序
Dec 30 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Django logging配置及使用详解
Jul 23 Python
Python操作SQLite数据库过程解析
Sep 02 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
python 实现全球IP归属地查询工具
Dec 18 Python
python如何进行矩阵运算
Jun 05 #Python
Opencv求取连通区域重心实例
Jun 04 #Python
Python中zip函数如何使用
Jun 04 #Python
Python中有几个关键字
Jun 04 #Python
Python如何转换字符串大小写
Jun 04 #Python
如何在Python对Excel进行读取
Jun 04 #Python
opencv 查找连通区域 最大面积实例
Jun 04 #Python
You might like
提问的智慧(2)
2006/10/09 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Python检测QQ在线状态的方法
2015/05/09 Python
Python使用chardet判断字符编码
2015/05/09 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
2014政务公开实施方案
2014/02/19 职场文书
初中班主任评语
2014/04/24 职场文书
建筑投标担保书
2014/05/20 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
玄武湖导游词
2015/02/05 职场文书
法律意见书范本
2015/06/04 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android