温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python中 *args 和 **kwargs如何使用

发布时间:2021-07-10 11:27:59 来源:亿速云 阅读:192 作者:Leah 栏目:大数据

本篇文章给大家分享的是有关python中 *args 和 **kwargs如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1 * 和 **

其实, 并不是必须写成 「*args 和 **kwargs」,真正在参数传递时起作用的,只有变量前面的 *(星号)。你也可以写成 *params 和 **kv_params。也就是说,*args 和 **kwargs 只是一种通俗的写法,但不是必须的。

* 用于传入的多个参数将按照元组形式存储,是一个元组

** 用于参数前则表示传入的(多个)参数将按照字典的形式存储,是一个字典

下面,我们通过代码的形式来一一介绍它们具体是怎么使用的!

「Talk is cheap,Show you the code」

2 *args 的用法

*args 和 **kwargs 主要在函数定义的时候使用。 而 *args 是用来发送一个非键值对的可变数量的参数列表给一个函数.

def test_args(normal_arg, *args):    print("正常的参数:", normal_arg)
    print("*args:", args, "类型:", type(args))
    for arg in args:
        print("通过*args传递的参数:", arg)


test_args('python', 'java', 'c/c++', 'go')

上面的代码执行结果如下:

*args: ('java', 'c/c++', 'go') 类型: <class 'tuple'>
通过*args传递的参数: java
通过*args传递的参数: c/c++
通过*args传递的参数: go

可以发现,看起来test_args函数只接收两个参数,可实际上我们向test_args函数传递了四个参数,魔法之处就在于 *args,实际上是 *args 把多个参数组装成了一个元组传递给了test_args函数,可以看出,上面程序输出也是如此。

3 **kwargs 的用法

**kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。如果你想要在一个函数里处理一些带名字的参数, 你就要使用 **kwargs 了。下面是一个例子:

def test_kwargs(**kwargs):    print("**kwargs:", kwargs, "类型:", type(kwargs))
    for key, value in kwargs.items():
        print("{0} == {1}".format(key, value))


test_kwargs(name="tom", age="3")

上面的代码执行结果如下:

**kwargs: {'name': 'tom', 'age': '3'} 类型: <class 'dict'>name == tomage == 3

**kwargs 把多个参数组装成了一个字典传递给了test_kwargs函数,到这,你可以知道怎样在一个函数里, 处理了一个键值对参数了。

4 使用 *args 和 **kwargs 来调用函数

那现在我们将看到怎样使用 *args和 **kwargs 来调用一个函数。假设,你有这样一个的函数:

def test_args_kwargs(arg1, arg2, arg3):    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

你可以使用 *args 或 **kwargs来给这个函数传递参数:

# 使用 *args方式args = ("python", "java", "go")
test_args_kwargs(*args)# 使用 **kwargs方式kwargs = {"arg2": "java", "arg3": "go", "arg1": "python"}
test_args_kwargs(**kwargs)

以上就是python中 *args 和 **kwargs如何使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI