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

 更新时间:2022年04月07日 10:21:41   作者:赵卓不凡  
本文我们将通过示例了解Python中*args和 **kwargs的使用方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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中@contextmanager装饰器的用法详解

    python中@contextmanager装饰器的用法详解

    这篇文章主要介绍了python中@contextmanager装饰器的用法详解,@contextmanager 的作用就是我们可以把一个非自定义类改成一个上下文管理器,需要的朋友可以参考下
    2023-07-07
  • Python编程基础之输入与输出

    Python编程基础之输入与输出

    这篇文章主要为大家介绍了Python输入与输出,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Python如何建立多个值和单个键的映射

    Python如何建立多个值和单个键的映射

    在Python中,常见的字典只能映射单个键到单个值,若需映射单个键到多值,可以通过将值存储于列表或集合中实现,使用列表可以保持元素插入顺序,而使用集合则可以去重,collections模块的defaultdict类简化了此类多值字典的创建过程
    2024-09-09
  • python实现堆栈与队列的方法

    python实现堆栈与队列的方法

    这篇文章主要介绍了python实现堆栈与队列的方法,包含了堆栈与队列的定义方法及常用操作,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • python调用api实例讲解

    python调用api实例讲解

    在本篇内容里小编给大家分享的是一篇关于python调用api实例讲解内容,有兴趣的朋友们可以参考下。
    2021-04-04
  • python合并RepeatMasker预测结果中染色体的overlap区域

    python合并RepeatMasker预测结果中染色体的overlap区域

    这篇文章主要为大家介绍了python合并RepeatMasker预测结果中染色体的overlap区域实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • python实现定时器的5种方法

    python实现定时器的5种方法

    本文主要介绍了python实现定时器的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python 实现图片转字符画的示例(静态图片,gif皆可)

    Python 实现图片转字符画的示例(静态图片,gif皆可)

    这篇文章主要介绍了Python 实现图片转字符画的示例,帮助大家更好的利用python进行图片处理,感兴趣的朋友可以了解下
    2020-11-11
  • Python实现SSH远程登陆,并执行命令的方法(分享)

    Python实现SSH远程登陆,并执行命令的方法(分享)

    下面小编就为大家带来一篇Python实现SSH远程登陆,并执行命令的方法(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Python实现的连接mssql数据库操作示例

    Python实现的连接mssql数据库操作示例

    这篇文章主要介绍了Python实现的连接mssql数据库操作,结合实例形式分析了Python安装pymssql模块以及基于pymssql模块连接sql2008 R2数据库的具体操作技巧,需要的朋友可以参考下
    2018-08-08

最新评论