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语言中的按位运算符
Nov 26 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
使用python实现画AR模型时序图
Nov 20 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
最新pycharm安装教程
Nov 18 Python
python中slice参数过长的处理方法及实例
Dec 15 Python
Python实现信息管理系统
Jun 05 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
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
详解vue的diff算法原理
2018/05/20 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
vue中axios的二次封装实例讲解
2019/10/14 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
详解vue v-model
2020/08/31 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python sys.argv用法实例
2015/05/28 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
初三学习决心书
2014/03/11 职场文书
股份转让协议书
2014/04/12 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书