Python中函数参数匹配模型详解


Posted in Python onJune 09, 2019

当我们的函数接收参数为任意个,或者不能确定参数个数时,我们,可以利用 * 来定义任意数目的参数,这个函数调用时,其所有不匹配的位置参数会被赋值为元组,我们可以在函数利用循环或索引进行使用

def f(*args):
  # 直接打印元组参数
  print(args)
  print('-'*20)
  # 循环打印元组参数
  [print(i) for i in args]
  ...
# 传递一个参数
f(1)
print('='*20)
# 传递5个参数
f(1, 2, 3, 4, 5)

示例结果:

(1,)
--------------------
1
====================
(1, 2, 3, 4, 5)
--------------------
1
2
3
4
5

###任意参数 ** 而 ** 是用于收集关键字参数并将这些参数传递给一个新的字典,即在函数中我们可以利用处理字典的方式处理这些参数
def f(**args):
  # 直接打印字典参数
  print(args)
  for key, value in args.items():
    print('{}: {}'.format(key, value))
f(a=1)
print('='*20)
f(a=1, b=2, c=3)

示例结果:

{'a': 1}
a: 1
====================
{'a': 1, 'b': 2, 'c': 3}
a: 1
b: 2
c: 3

任意参数混合

我们可以混合一般参数、 * 参数以及 ** 参数完成实现更加复杂的调用方式。

def f(a, *targs, **dargs):
  print(a, targs, dargs)
f(1,2,3, x=1, y=2)

示例结果:

1 (2, 3) {'x': 1, 'y': 2}

可以看到这种调用方式并不那么直观,甚至有些“混淆视听”,那么怎么在复杂任意参数的调用时,是的在函数调用更加直观明了?

解包参数

我们可以在函数调用时,直接利用*和**进行参数传递,然后让函数自动解包,也就类似之前的序列解包,使用调用时更加的直观。

def f(a, b, c, d):
  print(a, b, c, d)
f(1, *(2, 3), **{'d': 4})

示例结果:

1 2 3 4

总结

以上所述是小编给大家介绍的Python中函数参数匹配模型详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
基于Python中numpy数组的合并实例讲解
Apr 04 Python
基于数据归一化以及Python实现方式
Jul 11 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
python scrapy爬虫代码及填坑
Aug 12 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
Python常用类型转换实现代码实例
Jul 28 Python
属性与 @property 方法让你的python更高效
Sep 21 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
pandas将list数据拆分成行或列的实现
Dec 13 Python
Python程序包的构建和发布过程示例详解
Jun 09 #Python
Python面向对象之继承和多态用法分析
Jun 08 #Python
Python基本数据结构之字典类型dict用法分析
Jun 08 #Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 #Python
Python面向对象之类的封装操作示例
Jun 08 #Python
Python面向对象之类和实例用法分析
Jun 08 #Python
Python学习笔记之自定义函数用法详解
Jun 08 #Python
You might like
apache rewrite_module模块使用教程
2008/01/10 PHP
PHP中PDO基础教程 入门级
2011/09/04 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
Python实现优先级队列结构的方法详解
2016/06/02 Python
Python生成数字图片代码分享
2017/10/31 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
PyTorch中的Variable变量详解
2020/01/07 Python
python3实现飞机大战
2020/11/29 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
服装设计师职业生涯规划范文
2014/02/28 职场文书
暑假学习心得体会
2014/09/02 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
综治维稳工作汇报
2014/10/27 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
员工给公司的建议书
2019/06/24 职场文书
mysql查看表结构的三种方法总结
2022/07/07 MySQL