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实现堆栈与队列的方法
Jan 15 Python
python中list列表的高级函数
May 17 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
python实现海螺图片的方法示例
May 12 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
python如何通过pyqt5实现进度条
Jan 20 Python
python代码xml转txt实例
Mar 10 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
Python连续赋值需要注意的一些问题
Jun 03 Python
Python实现简单得递归下降Parser
May 02 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
关于在php.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
Python基础之getpass模块详细介绍
2017/08/10 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
大学生实习期自我评价范文
2013/10/03 职场文书
旷课检讨书3000字
2014/02/04 职场文书
低碳环保标语
2014/06/12 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
2016年十一促销广告语
2016/01/28 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android
git中cherry-pick命令的使用教程
2022/06/25 Servers