首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库Python

Python函数中的*args和**kwargs参数

减小字体 增大字体 作者:本站  来源:本站原创  发布时间:2022-12-14 20:31:44

本站在《Python中自定义函数的方法》一文中讲解了Python中定义一个函数的方法以及基本参数的相关知识。

但在实际应用中,我们在定义一个函数时无法确切的知道一个函数到底需要指定多少个参数,或者一些参数根据实际情况进行指定,而非每次调用时都用的上,这时我们在定义函数时需要借助*args*kwargs参数来解决这个问题了。

*args参数

*args表示一个列表或元组型的位置参数,用于传递给函数进行处理使用。

当在定义一个函数时,我们无法确定参数的个数时,可以使用*args来传递任意数量的参数。

此时,*用于将参数打包成一个列表或元组传递给函数。当然,参数的名字是任何符合Python命名规则的参数,但是我们习惯上使用*args来指代这种参数。

下面这个例子用于求若干个数字的和,由于数字的数量事先无法确定,我们使用*args参数来解决这个问题。

def num_sum(*args):
    the_sum = 0
    print('打包的参数为:', args)
    for e in args:
        the_sum += e
    return the_sum

print('1.这些数字之和为:', num_sum(12, 34, 7, 19))
print('2.这些数字之和为:', num_sum(12.3, 34.5))

其运行结果如下:

打包的参数为: (12, 34, 7, 19)
1.这些数字之和为: 72
打包的参数为: (12.3, 34.5)
2.这些数字之和为: 46.8

在Pycharm中的程序及运行结果如下所示:

Python中*args的使用例子

Python中使用*args参数例子运行结果

**kwargs参数

**kwargs参数用于将关键字参数打包成字典类型传递给函数,供函数使用。

下面这个例子用于演示**kwargs参数的使用形式。这个例子用于计算某人3门课程的平均成绩。

def average_grade(**kwargs):
    the_sum = 0
    print('成绩分别为:', kwargs)
    for k, v in kwargs.items():
        the_sum += v
    return the_sum / len(kwargs.items())


# 第一种使用方法
average_xiaoming = average_grade(Chinese=89, Math=93, History=91)
print('小明的三科平均成绩为:', average_xiaoming)
# 第二种使用方法
grade_xiaogang = {'Chinese': 76, 'Math': 91, 'History': 88}
average_xiaogang = average_grade(**grade_xiaogang)
print('小刚的三科平均成绩为:', average_xiaogang)

其输出结果如下:

成绩分别为: {'Chinese': 89, 'Math': 93, 'History': 91}
小明的三科平均成绩为: 91.0
成绩分别为: {'Chinese': 76, 'Math': 91, 'History': 88}
小刚的三科平均成绩为: 85.0

该例子在Pycharm中的程序及运行结果如下:

Python中**kwargs型参数使用的例子

**kwargs使用例子运行结果

最后一个例子

这个例子来源于:https://stackoverflow.com/questions/3394835/use-of-args-and-kwargs

该例子同时演示了常见的三种参数的使用方法。

def func(required_arg, *args, **kwargs):
    # required_arg is a positional-only parameter.
    print (required_arg)

    # args is a tuple of positional arguments,
    # because the parameter name has * prepended.

    if args: # If args is not empty.
        print (args)

    # kwargs is a dictionary of keyword arguments,
    # because the parameter name has ** prepended.

    if kwargs: # If kwargs is not empty.
        print (kwargs)

>>> func()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: func() takes at least 1 argument (0 given)

>>> func("required argument")
required argument
>>> func("required argument", 1, 2, '3')
required argument
(1, 2, '3')

>>> func("required argument", 1, 2, '3', keyword1=4, keyword2="foo")
required argument
(1, 2, '3')
{'keyword2': 'foo', 'keyword1': 4}

本文由本站原创和整理,如需转载请注明出处:翔宇亭IT乐园(http://www.biye5u.com),并给出本文的连接地址。

如有任何问题,也欢迎留言交流。

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.