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 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
django的ORM操作 增加和查询
Jul 26 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
python 连续不等式语法糖实例
Apr 15 Python
python多进程下的生产者和消费者模型
May 07 Python
python中执行smtplib失败的处理方法
Jul 01 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
一文读懂Python 枚举
Aug 25 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 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
FCKeditor添加自定义按钮
2008/03/27 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python getpass模块用法及实例详解
2019/10/07 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
某公司面试题
2012/03/05 面试题
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
大学生自荐信
2013/12/11 职场文书
《开国大典》教学反思
2014/04/19 职场文书
体育课外活动总结
2014/07/08 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫