python里面的*args 和 **kwargs

我观察到,大部分新的Python程序员都需要花上大量时间理解清楚 *args**kwargs这两个魔法变量。那么它们到底是什么?

首先让我告诉你, 其实并不是必须写成*args**kwargs。 只有变量前面的 *(星号)才是必须的. 你也可以写成*var**vars. 而写成*args**kwargs只是一个通俗的命名约定。 那就让我们先看一下*args吧。

*args 的用法

*args**kwargs 主要用于函数定义。 你可以将不定数量的参数传递给一个函数。

这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。 *args 是用来发送一个非键值对的可变数量的参数列表给一个函数.

这里有个例子帮你理解这个概念:

def test_var_args(f_arg, *argv):
    print("first normal arg:", f_arg)
    for arg in argv:
        print("another arg through *argv:", arg)

test_var_args('yasoob', 'python', 'eggs', 'test')

这会产生如下输出:

**kwargs 的用法

**kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用**kwargs

这里有个让你上手的例子:

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


>>> greet_me(name="yasoob")
name == yasoob

现在你可以看出我们怎样在一个函数里, 处理了一个键值对参数了。

这就是**kwargs的基础, 而且你可以看出它有多么管用。 接下来让我们谈谈,你怎样使用*args**kwargs来调用一个参数为列表或者字典的函数。

Python 中,`*args` 和 `**kwargs` 是常用的参数传递方式,用于将不定数量的参数传递给函数。 `*args` 是一个特殊的语法,用于在函数定义中接受任意数量的位置参数。当我们在函数定义中使用 `*args` 参数时,Python 会将传递给函数的所有位置参数打包成一个元组,并将该元组赋值给 `args` 变量。这样,我们就可以在函数中使用 `args` 变量来访问所有位置参数。 下面是一个简单的例子,演示如何使用 `*args` 参数接受任意数量的位置参数: ``` def print_args(*args): for arg in args: print(arg) # 调用函数 print_args(1, 2, 3) print_args("hello", "world") ``` 在上面的代码中,我们定义了一个 `print_args` 函数,它接受任意数量的位置参数。在函数中,我们使用 `for` 循环遍历 `args` 元组,并打印每个参数的值。当我们调用 `print_args` 函数时,Python 会将传递给函数的所有位置参数打包成一个元组,并将该元组赋值给 `args` 变量。 `**kwargs` 是另一个特殊的语法,用于在函数定义中接受任意数量的关键字参数。当我们在函数定义中使用 `**kwargs` 参数时,Python 会将传递给函数的所有关键字参数打包成一个字典,并将该字典赋值给 `kwargs` 变量。这样,我们就可以在函数中使用 `kwargs` 变量来访问所有关键字参数。 下面是一个简单的例子,演示如何使用 `**kwargs` 参数接受任意数量的关键字参数: ``` def print_kwargs(**kwargs): for key, value in kwargs.items(): print(f"{key} = {value}") # 调用函数 print_kwargs(a=1, b=2, c=3) print_kwargs(name="Alice", age=25) ``` 在上面的代码中,我们定义了一个 `print_kwargs` 函数,它接受任意数量的关键字参数。在函数中,我们使用 `for` 循环遍历 `kwargs` 字典,并打印每个参数的键值对。当我们调用 `print_kwargs` 函数时,Python 会将传递给函数的所有关键字参数打包成一个字典,并将该字典赋值给 `kwargs` 变量。 需要注意的是,`*args` 和 `**kwargs` 可以同时在函数定义中使用,以接受任意数量的位置参数和关键字参数。在这种情况下,`*args` 必须放在 `**kwargs` 之前。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值