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 相关文章推荐
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
python实现图片处理和特征提取详解
Nov 13 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
详解python itertools功能
Feb 07 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
在终端启动Python时报错的解决方案
Nov 20 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 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性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
srcElement表格样式
2006/09/03 Javascript
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
python装饰器原理与用法深入详解
2019/12/19 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
python文件编写好后如何实践
2020/07/07 Python
python logging模块的使用
2020/09/07 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
打架检讨书300字
2014/02/02 职场文书
加强作风建设工作总结
2014/10/23 职场文书