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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
Python 列表(List)操作方法详解
Mar 11 Python
python创建和删除目录的方法
Apr 29 Python
python通过smpt发送邮件的方法
Apr 30 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
python递归法实现简易连连看小游戏
Mar 25 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
python中的itertools的使用详解
Jan 13 Python
Python存储读取HDF5文件代码解析
Nov 25 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
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
JScript的条件编译
2007/05/29 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
keras输出预测值和真实值方式
2020/06/27 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
应聘自荐书
2013/10/08 职场文书
会计助理岗位职责
2014/02/17 职场文书
高中军训感言1000字
2014/03/01 职场文书
遗失说明具结保证书
2015/02/26 职场文书
面试通知单大全
2015/04/20 职场文书
国庆节新闻稿
2015/07/17 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang