详解Python中*args和**kwargs的使用


Posted in Python onApril 07, 2022

1. 引言

在本文中,我们将讨论 Python 中的 *args 和 **kwargs 及其用法和示例。

闲话少说,我们直接开始吧。

2. 问题引入

在Python中写函数的时候,我们经常需要给函数传值,这些值被称为函数参数。

我们不妨来举个栗子,我们实现加法运算如下:

def add(x,y):
    return x+y
print(add(2,3))

输出:

5

如果进一步来说,我们需要实现三个数字求和的操作呢?很简单,我们可以修改函数以接受三个参数并将它们的总和返回,代码如下:

def add(x, y, z):
    return x+y+z

print(add(2, 3, 5))

输出:

10

如果此时我们又需要对四个数字求和呢?如果又变成五个数字求和呢?

当我们有可变数量的参数时,就会出现问题。我们是否应该继续修改函数以接受确切数量的参数?当然不是,我们不会这样做。实际上,以上场景为*args 和 **kwargs大显身手的地方。

3. Python中的*args

*args 允许我们将可变数量的参数传递给 Python中相应的函数。在函数中,我们应该在参数名称前使用 * 来表示传递可变数量的参数。

样例代码如下:

def add(*args):
    print(args, type(args))
add(2, 3)

输出如下:

(2, 3) <class 'tuple'>

因此,我们确定这些传递的参数在函数内部创建了一个元组,接着我们就可以据此来写相应的加法函数,如下所示:

def add(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total

调用代码如下:

print(add(2, 3))
print(add(2, 3, 5))
print(add(2, 3, 5, 7))
print(add(2, 3, 5, 7, 9))

输出如下:

5
10
17
26

需要注意的是,上述函数的参数的名称不一定是 args,它可以是任何其他名字,在上述代码中,它是numbers,但是通常的做法就是使用 *args 作为函数参数名称来表示该参数是一个可变数量的参数。

4. Python中的**kwargs

kwargs 是 keyword arguments 的缩写,表示关键字参数。** kwargs 允许我们将可变数量的关键字参数传递给 Python函数。在函数中,我们在参数名称前使用双星号 ** 来表示这种类型的参数。

样例代码如下:

def total_fruits(**kwargs):
    print(kwargs, type(kwargs))
total_fruits(banana=5, mango=7, apple=8)

输出如下:

{'banana': 5, 'mango': 7, 'apple': 8} <class 'dict'>

此时我们可以看到,在上述情况下,字典作为参数进行传递,并且这些参数在函数内部创建了一个字典,接着,我们可以实现函数 total_fruits() 用以返回水果的总数。

def total_fruits(**fruits):
    total = 0
    for amount in fruits.values():
        total += amount
    return total

调用代码如下:

print(total_fruits(banana=5, mango=7, apple=8))
print(total_fruits(banana=5, mango=7, apple=8, oranges=10))
print(total_fruits(banana=5, mango=7))

输出如下:

20
30
12 

需要注意的是,参数的名称不一定是 kwargs,它可以是任何名字,在上述代码中,它是**fruits。但是通常的做法就是使用 **kwargs 作为函数参数名称来表示该参数是一个可变数量的关键字参数。

5. 总结

args和kwargs可以组合起来可以传入任意的参数,这在参数未知的情况下是很有效的,同时加强了函数的可拓展性。

到此这篇关于详解Python中*args和**kwargs的使用的文章就介绍到这了,更多相关Python *args  **kwargs内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python并发编程之线程实例解析
Dec 27 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
如何通过python实现人脸识别验证
Jan 17 Python
python super用法及原理详解
Jan 20 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 Python
2021年最新用于图像处理的Python库总结
Jun 15 Python
Python列表的索引与切片
Apr 07 #Python
Python字符串的转义字符
Python字符串格式化方式
Apr 07 #Python
Python中re模块的元字符使用小结
Python基本知识点总结
Apr 07 #Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 #Python
Python OpenCV实现图像模板匹配详解
You might like
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
11款基于Javascript的文件管理器
2009/10/25 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
Python Web编程之WSGI协议简介
2018/07/18 Python
Python基础教程之异常详解
2019/01/10 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
英国最大的海报商店:GB Posters
2018/03/20 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
单位委托书怎么写
2014/09/21 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
销售经理岗位职责
2015/01/31 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python