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的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
python实现指定字符串补全空格的方法
Apr 30 Python
Python实现识别图片内容的方法分析
Jul 11 Python
python requests.post带head和body的实例
Jan 02 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
python创造虚拟环境方法总结
Mar 04 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
浅谈python数据类型及其操作
May 25 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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后台如何避免用户直接进入方法实例
2013/10/15 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
js继承实现方法详解
2016/12/16 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
详解Nodejs之npm&package.json
2017/06/15 NodeJs
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
js实现简单点赞操作
2020/03/17 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
数学教学随笔感言
2014/02/17 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
士兵突击观后感
2015/06/16 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
2015年中秋寄语
2015/07/31 职场文书
解决 redis 无法远程连接
2022/05/15 Redis