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对象体系深入分析
Oct 28 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
pymongo给mongodb创建索引的简单实现方法
May 06 Python
MySQL最常见的操作语句小结
May 07 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
Django分页功能的实现代码详解
Jul 29 Python
python pandas 时间日期的处理实现
Jul 30 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
Python3常见函数range()用法详解
Dec 30 Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 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作的文本留言本的例子(三)
2006/10/09 PHP
PHP与SQL注入攻击[三]
2007/04/17 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
[JS]点出统计器
2020/10/11 Javascript
csdn 博客的css样式 v3
2009/02/24 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
简单谈谈python的反射机制
2016/06/28 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
工商管理自荐书
2014/07/06 职场文书
暑期工社会实践报告
2015/07/13 职场文书
开学随笔
2015/08/15 职场文书
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS