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之眼花缭乱的运算符
Sep 14 Python
python MySQLdb Windows下安装教程及问题解决方法
May 09 Python
Python中matplotlib中文乱码解决办法
May 12 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
《Python学习手册》学习总结
Jan 17 Python
Python模块搜索路径代码详解
Jan 29 Python
对numpy中array和asarray的区别详解
Apr 17 Python
python中的tcp示例详解
Dec 09 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
Python实现转换图片背景颜色代码
Apr 30 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 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
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
vue form check 表单验证的实现代码
2018/12/09 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
JS实现小星星特效
2019/12/24 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python和shell获取文本内容的方法
2018/06/05 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
旅游管理本科生求职信
2013/10/14 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
考研复习计划
2015/01/19 职场文书
车队安全员岗位职责
2015/02/15 职场文书