Python 中的 *args 和 **kwargs


在本文中,我们将介绍 (双星/星号)和 *(星号/星号)在Python中对参数的作用,在这里,我们还将介绍Python 中的 args 和 kwargs 示例。**我们可以使用特殊符号将可变数量的参数传递给函数。

有两个特殊符号:

Python 中的 *args 和 **kwargs

Python 中的 *args 和 **kwargs

Python 中用于传递参数的特殊符号:

  • *args(非关键字参数)
  • **kwargs(关键字参数)

注意: “当我们对应该在函数中传递的参数数量有疑问时,我们使用像这样的“通配符”或“”符号 - args 或 **kwargs - 作为函数的参数。”

什么是 Python *args?

Python 函数定义中的特殊语法*args用于将可变数量的参数传递给函数。它用于传递非关键字、可变长度参数列表。

  • 语法是使用符号 * 来接受可变数量的参数;按照惯例,它经常与 args 这个词一起使用。
  • args*允许您接受比您之前定义的形式参数数量更多的参数。使用args*,可以将任意数量的额外参数附加到当前的形式参数(包括零个额外参数)。
  • 例如,我们想要创建一个乘法函数,它接受任意数量的参数,并且能够将它们全部相乘。可以使用 *args 来完成。
  • 使用 ,我们与 关联的变量变得可迭代,这意味着您可以执行诸如迭代它之类的操作,运行一些高阶函数,例如映射和过滤器等。

示例1:

用于说明可变数量参数的 *args 的 Python 程序

def myFun(*argv):
    for arg in argv:
        print(arg)


myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

输出:

Hello
Welcome
to
GeeksforGeeks

示例2:

用第一个额外参数来说明 *args 的 Python 程序

  • Python3
def myFun(arg1, *argv):
    print("First argument :", arg1)
    for arg in argv:
        print("Next argument through *argv :", arg)


myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

输出:

First argument : Hello
Next argument through *argv : Welcome
Next argument through *argv : to
Next argument through *argv : GeeksforGeeks

什么是 Python \kwargs?**

Python 中函数定义中的特殊语法**kwargs用于传递带关键字的可变长度参数列表。我们使用带有双星的名称kwargs 。原因是双星允许我们传递关键字参数(以及任意数量的关键字参数)。

  • 关键字参数是您在将变量传递给函数时为其提供名称的位置。
  • 人们可以将kwargs视为一本字典,它将每个关键字映射到我们与其一起传递的值。这就是为什么当我们迭代kwargs时,它们的打印顺序似乎没有任何顺序。

示例1:

用于说明可变数量关键字参数的 *kwargs 的 Python 程序。这里 **kwargs 接受函数调用传递的关键字可变长度参数。对于first='Geeks',first 是键,'Geeks' 是一个值。简单来说,我们分配什么是价值,分配给谁才是关键。

  • Python3
def myFun(**kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))


# Driver code
myFun(first='Geeks', mid='for', last='Geeks')

输出:

first == Geeks
mid == for
last == Geeks

示例2:

用于说明可变数量关键字参数和一个额外参数的 kwargs 的 Python 程序。都是一样的,但一个变化是我们传递了位置参数(myFun 中的 arg1)可接受的非关键字参数。我们传递的关键字参数可以被 kwargs 接受。简单吧?

  • Python3
def myFun(arg1, **kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))


# Driver code
myFun("Hi", first='Geeks', mid='for', last='Geeks')

输出:

first == Geeks
mid == for
last == Geeks

在Python中同时使用*args和\kwargs来调用函数**

示例1:

在这里,我们将 args 和 **kwargs 作为 myFun 函数中的参数传递。将 args 传递给 myFun 只是意味着我们传递 args 包含的位置参数和可变长度参数。因此,“Geeks”传递给 arg1,“for”传递给 arg2,“Geeks”传递给 arg3。当我们将 **kwargs 作为参数传递给 myFun 时,这意味着它接受关键字参数。这里,“arg1”是键,值是“Geeks”,它被传递给arg1,就像“for”和“Geeks”分别传递给arg2和arg3一样。传递所有数据后,我们将按行打印所有数据。

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


# Now we can use *args or **kwargs to
# pass arguments to this function :
args = ("Geeks", "for", "Geeks")
myFun(*args)

kwargs = {"arg1": "Geeks", "arg2": "for", "arg3": "Geeks"}
myFun(**kwargs)

输出:

arg1: Geeks
arg2: for
arg3: Geeks
arg1: Geeks
arg2: for
arg3: Geeks

示例2:

在这里,我们将 args 和 kwargs 作为 myFun 函数中的参数传递。其中'geeks'、'for'、'geeks'**作为 args 传递,first=”Geeks”、mid=”for”、last=”Geeks” 作为 kwargs 传递并在同一行中打印。**

def myFun(*args, **kwargs):
    print("args: ", args)
    print("kwargs: ", kwargs)


# Now we can use both *args ,**kwargs
# to pass arguments to this function :
myFun('geeks', 'for', 'geeks', first="Geeks", mid="for", last="Geeks")

输出:

args: ('geeks', 'for', 'geeks')
kwargs: {'first': 'Geeks', 'mid': 'for', 'last': 'Geeks'}

在Python中使用*args和**kwargs设置对象的值

  • *args 以元组形式接收参数。
  • kwargs 以字典形式接收参数。

示例 1:使用 Python *args

  • Python
# defining car class
class car():
    # args receives unlimited no. of arguments as an array
    def __init__(self, *args):
        # access args index like array does
        self.speed = args[0]
        self.color = args[1]


# creating objects of car class
audi = car(200, 'red')
bmw = car(250, 'black')
mb = car(190, 'white')

# printing the color and speed of the cars
print(audi.color)
print(bmw.speed)

输出:

red
250

示例 2:使用 Python \kwargs**

  • Python
# defining car class
class car():
    # args receives unlimited no. of arguments as an array
    def __init__(self, **kwargs):
        # access args index like array does
        self.speed = kwargs['s']
        self.color = kwargs['c']


# creating objects of car class
audi = car(s=200, c='red')
bmw = car(s=250, c='black')
mb = car(s=190, c='white')

# printing the color and speed of cars
print(audi.color)
print(bmw.speed)

输出:

red
250


原文链接:codingdict.net