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 26 Python
在Python中使用dict和set方法的教程
Apr 27 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
Django框架的使用教程路由请求响应的方法
Jul 03 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
解决python3安装pandas出错的问题
May 20 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 url 加密解密函数代码
2011/08/26 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
nodejs教程之入门
2014/11/21 NodeJs
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
jquery加载单文件vue组件的方法
2017/06/20 jQuery
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
PyQt5每天必学之组合框
2018/04/20 Python
Python if语句知识点用法总结
2018/06/10 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python实现视频分帧效果
2019/05/31 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
公务员培训自我鉴定
2014/02/01 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
Python图像处理库PIL详细使用说明
2022/04/06 Python