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 相关文章推荐
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Python基础知识_浅谈用户交互
May 31 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
Python使用googletrans报错的解决方法
Sep 25 Python
详解Django的CSRF认证实现
Oct 09 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
python列表生成器迭代器实例解析
Dec 19 Python
浅析matlab中imadjust函数
Feb 27 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
解决python运行效率不高的问题
Jul 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
JAVA/JSP学习系列之六
2006/10/09 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
php和nginx交互实例讲解
2019/09/24 PHP
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
如何定义TensorFlow输入节点
2020/01/23 Python
python 19个值得学习的编程技巧
2020/08/15 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
美的官方商城:Midea
2016/09/14 全球购物
环境科学专业个人求职信
2013/12/15 职场文书
文秘专业个人求职信
2013/12/22 职场文书
公司庆典活动邀请函
2014/01/09 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
房产公证书格式
2015/01/26 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
PHP RabbitMQ消息列队
2022/05/11 PHP