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实现子类调用父类的方法
Nov 10 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Python做智能家居温湿度报警系统
Sep 25 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
使用Python制作一个打字训练小工具
Oct 01 Python
Tensorflow的梯度异步更新示例
Jan 23 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
python制作一个简单的gui 数据库查询界面
Nov 19 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
用PHP+MySql编写聊天室
2006/10/09 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
Python输出各行命令详解
2018/02/01 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
python 如何设置守护进程
2020/10/29 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
init进程的作用
2015/08/20 面试题
大学生村官演讲稿
2014/04/25 职场文书
英语求职信范文
2014/05/23 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
nginx rewrite功能使用场景分析
2022/05/30 Servers