详解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实现的简单dns查询功能示例
May 24 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
Python3处理HTTP请求的实例
May 10 Python
pycharm运行出现ImportError:No module named的解决方法
Oct 13 Python
python DataFrame 取差集实例
Jan 30 Python
python Tkinter版学生管理系统
Feb 20 Python
简单了解django orm中介模型
Jul 30 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
如何将json数据转换为python数据
Sep 04 Python
用 python 进行微信好友信息分析
Nov 28 Python
python中round函数保留两位小数的方法
Dec 04 Python
django 认证类配置实现
Nov 11 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&amp;java(二)
2006/10/09 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
php 面向对象的一个例子
2011/04/12 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php define的第二个参数使用方法
2013/11/04 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
python删除过期文件的方法
2015/05/29 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
python并发编程之线程实例解析
2017/12/27 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
python 实现有道翻译功能
2021/02/26 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
工程专业求职自荐书范文
2014/02/18 职场文书
奠基仪式主持词
2014/03/20 职场文书
运动会宣传口号
2014/06/09 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
博士生专家推荐信
2015/03/25 职场文书
行政撤诉申请书
2015/05/18 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python