Python 中的位置参数与关键字参数

在 Python 中调用函数时,我们经常需要将输入值传递给它。在本文中,我们将讨论 Python 中的位置参数和关键字参数。我们还将讨论位置参数与关键字参数,其中我们将讨论这两种为 Python 中的函数提供输入的方法的优缺点。

Python 中的参数是什么

为了理解一个参数,让我们声明一个函数 printDetails(),它接受四个值,即一个人的 nameidentity_numberage 和 weight,然后打印它们。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

这里,nameidentity_numberage 和 weight 被称为函数 printDetails() 的参数。因此,我们可以说参数是函数签名/声明的一部分。

现在,假设我们要使用 name– Adityaidentity_number– TM2017001age– 23 和 weight– 65 调用函数 printDetails() 作为输入。我们可以这样做。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

printDetails("Aditya", "TM2017001", 23, 65)

输出:

Name is: Aditya
Identity Number is: TM2017001
Age is: 23
Weight is: 65

这里,AdityaTM201700123 和 65 是函数 printDetails() 的参数。函数执行后,将值 Aditya 分配给参数 name,将 TM2017001 分配给参数 identity_number,将 23 分配给参数 age,以及 65 分配给参数 weight。因此,我们可以说参数是传递给函数的值,而参数是在函数中声明的变量,该变量被分配给了该变量。

要将参数分配给参数,我们可以按照参数在函数中声明的顺序传递值。或者,我们也可以直接将参数赋值给参数。基于此,Python 中的参数分为位置参数和关键字参数。让我们一一讨论它们。

什么是 Python 中的位置参数

当我们直接将参数传递给函数,并根据其位置分配给参数时,则称为位置参数。例如,当我们使用值 AdityaTM201700123 和 65 调用函数 printDetails() 时,

printDetails("Aditya", "TM2017001", 23, 65)

所有输入参数将根据它们在函数调用中的位置和参数在函数声明中的位置分配给参数。让我们一起编写函数调用和函数声明,以便更好地理解这一点。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

printDetails("Aditya", "TM2017001", 23, 65)

输出:

Name is: Aditya
Identity Number is: TM2017001
Age is: 23
Weight is: 65

在这里,你可以观察到 printDetails() 函数具有按 nameidentity_numberage 和 weight 顺序排列的参数。因此,Aditya 被分配给 nameTM2017001 被分配给 identity_number23 被分配给 age,而 65 被分配给 weight

Python 中的关键字参数是什么

我们可以将它们直接分配给参数,而不是仅在函数中传递值,如下所示。

printDetails(name="Aditya", identity_number="TM2017001", age=23, weight=65)

在这里,每个参数都像一个键,每个参数都像一个值。因此,参数被称为关键字参数。在执行时,该函数的工作方式与处理位置参数的方式相同。你可以在以下示例中观察到这一点。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

printDetails(name="Aditya", identity_number="TM2017001", age=23, weight=65)

输出:

Name is: Aditya
Identity Number is: TM2017001
Age is: 23
Weight is: 65

位置参数与关键字参数:你应该使用什么

如果我们谈论执行,位置参数和关键字参数都具有相同的效率。选择使用这些方法中的任何一种取决于你的方便程度。

使用位置参数时,更改输入参数的位置可能会产生不需要的结果。例如,请看以下示例。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

printDetails(65, "TM2017001", 23, "Aditya")

输出:

Name is: 65
Identity Number is: TM2017001
Age is: 23
Weight is: Aditya

此处,65 已分配给参数 name,而 Aditya 已分配给参数 weight。因此,重要的是按照在函数声明中定义相应参数的相同顺序传递位置参数。

另一方面,我们可以在使用关键字参数时以任何顺序传递参数。它不影响函数的输出。你可以在以下示例中观察到这一点。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

printDetails(weight=65, identity_number="TM2017001", age=23, name="Aditya")

输出:

Name is: Aditya
Identity Number is: TM2017001
Age is: 23
Weight is: 65

因此,如果你想避免由于参数位置的变化而导致的任何可能的错误,使用关键字参数对你来说会更好。

我们还可以在单​​个函数调用中使用位置参数和关键字参数,如下面的程序所示。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

printDetails("Aditya", "TM2017001", age=23, weight=65)

输出:

Name is: Aditya
Identity Number is: TM2017001
Age is: 23
Weight is: 65

在这里,你可以观察到位置参数在定义相应参数的同一位置传递给函数。相比之下,关键字参数可以按任何顺序传递。此外,我们不能在传递关键字参数后传递位置参数。

一旦我们传递了关键字参数,所有剩余的参数都需要作为关键字参数传递。否则,程序会出错,如下例所示。

def printDetails(name, identity_number, age, weight):
    print("Name is:", name)
    print("Identity Number is:", identity_number)
    print("Age is:", age)
    print("Weight is:", weight)

printDetails("Aditya", identity_number="TM2017001", 23, weight=65)

输出:

  File "/home/aditya1117/PycharmProjects/pythonProject/webscraping.py", line 8
    printDetails("Aditya", identity_number="TM2017001", 23, weight=65)
                                                        ^
SyntaxError: positional argument follows keyword argument

因此,你可以根据自己的方便在同一个函数调用中选择位置参数或关键字参数,或两者兼而有之。

结论

在本文中,我们研究了 Python 中的位置参数和关键字参数。我们还讨论了位置参数与关键字参数,并得出结论,这两种方法在执行效率方面是相同的。我们甚至可以在一个函数调用中一起使用它们。请记住,我们不能在关键字参数之后使用位置参数。