Python中的关键字和位置参数

2025年1月5日 | 阅读6分钟

在 Python 中,函数参数在定义和定制函数行为方面起着至关重要的作用。我们将值传递给函数参数有两种方式:

  1. 关键字参数(Keyword arguments)
  2. 位置参数

在本文中,我们将探讨上面我们传递值给函数参数的两种方式。

那么,让我们先来看第一种方式。

关键字参数

我们在日常实践中很少使用这种方法。关键字参数是一种通过显式指定参数名称及其对应值来将参数传递给函数的方法。这种方法使您能够以任何顺序传递参数,而不管它们在函数中的定义顺序如何。

示例 1

以下是一个通过指定参数名称将值传递给函数参数的示例程序。

程序

输出

Hello Bob, you are 25 years old!

说明

在这里,在上面的示例程序中,我们使用了关键字参数,而忽略了函数定义中的顺序。

即使顺序不同,"Bob" 也会被赋给 name 参数,25 会被赋给 age 参数。

示例 2

这里是另一个描述关键字参数行为的例子。

程序

输出

Hi, Alice!
Hello, Bob?
Hello, Charlie!

说明

在提供的代码片段中,greet 函数接受三个参数:name、greeting 和 punctuation。greeting 和 punctuation 参数具有指定的默认值,这使得在调用函数时它们成为可选参数。

第一次调用函数时,我们使用了“greeting”和“name”的关键字参数。第二次调用时,我们还为 punctuation 和调用函数使用了关键字参数。第三次调用时,我们只使用了一个关键字参数,那就是 name。

调用函数的这些各种方式展示了带有默认值的关键字参数的灵活性。您可以在调用函数时通过使用参数名称来为特定参数指定值,而如果未显式提供参数,则剩余参数将采用其默认值。

位置参数

这种方法在我们的日常编程中很常用。位置参数是最常见的参数类型。它们按照参数定义的顺序传递给函数。参数的位置决定了它将被赋给哪个参数。

示例 1

以下是一个演示位置参数的简单示例程序。

程序

输出

Name: Alice
Aadhar number: 819203020768
Your name is Alice, and Aadhar number 819203020768 has been updated in the database.

说明

在这里,我们直接将值传递给了函数参数,而没有显式提及参数名称。函数按提供的顺序接收参数,并打印姓名和 Aadhar 号码。

示例 2

让我们看一个示例程序,了解它如何导致位置参数出现问题。

程序

输出

The result of 5 raised to the power of 6 is: 15625
The result of 6 raised to the power of 5 is: 7776

说明

这个示例程序有一个名为 calculate_power 的函数,它接受两个值:一个是基数,另一个是指数。

当我们用相同的值调用函数但改变了位置时,结果就改变了。这意味着改变参数的顺序会改变结果,并可能导致将来出现问题。

关键字参数和位置参数的混合使用

关键字参数和位置参数的结合为程序员提供了更大的灵活性。使用位置参数定义某些参数,并为其他参数显式指定参数名称,可以提高代码的可维护性和可读性。这种方法在处理具有许多参数的函数时尤其有用,其中一些参数具有默认值。通过使用关键字参数选择性地覆盖默认值,同时依赖于其他参数的顺序,可以使代码更具表现力,并适应不同的需求。

示例 1

以下是一个演示 Python 中关键字参数和位置参数组合的示例程序。

程序

输出

Hello, Alice! You are 25 years old and live in Unknown.
Hello, Bob! You are 30 years old and live in New York.
Hi, Charlie! You are 22 years old and live in Unknown.
Hello, David! You are 28 years old and live in London.

说明

以下代码示例演示了 Python 函数中默认值的用法。当定义函数时,参数可以为其分配默认值。如果函数使用参数调用,则将使用该参数的值。如果函数未为该参数提供参数,则将使用默认值。

例如,“print_info”函数接受四个参数:“name”、“age”、“city”和“greeting”。如果未为其中任何一个参数传递值,则将使用默认值。在第一次调用中,“Alice”被指定为“name”参数的位置参数,25 被指定为“age”参数。 “city”和“greeting”参数采用其默认值,分别为“Unknown”和“Hello”。类似地,在第二次调用中,“Bob”被指定为“name”参数,30 被指定为“age”参数,以及“New York”作为“city”参数的位置参数。“greeting”参数采用其默认值。

使用默认值,您可以使代码更简洁易读。

示例 2

让我们看看我们可以按什么顺序向函数传递参数。

程序

输出

ERROR!
File "<string>", line 8
    example_function(positional_arg1=1, 2, keyword_arg1= "custom_value" )
                                                                      ^
SyntaxError: positional argument follows keyword argument

说明

错误消息“SyntaxError: positional argument follows keyword argument”表示您在定义函数时混合了位置参数和关键字参数的顺序。重要的是要注意,在 Python 中,在函数定义中,位置参数应始终放在关键字参数之前。

注意:在函数定义中,位置参数必须放在关键字参数之前。

关键字参数与位置参数的区别

以下是突出显示 Python 中关键字参数和位置参数之间差异的表格表示。

特性位置参数关键字参数
语法根据参数顺序传递通过显式指定参数名称传递。
顺序很重要参数的顺序必须与参数的顺序匹配。参数的顺序可以与参数不同。
默认值默认情况下,没有值会自动分配为默认值。您可以为参数分配默认值。
灵活性更改参数顺序时灵活性较低。如果使用名称,则更灵活且与顺序无关。
可读性依赖于对参数顺序的理解。提高了可读性和自文档化。
引发错误必须提供所有参数,否则会出错。如果未指定某些参数,则将使用默认值,前提是已定义了它们。
示例greet("Alice" ,"Hi")greet(name="Alice", greeting="Hi")

结论

Python 的关键字参数和位置参数对于函数调用的灵活性和可读性至关重要。位置参数遵循参数顺序,而关键字参数通过名称分配值,提供灵活性和清晰度。关键字参数还支持可选参数的默认值。这些参数类型之间的选择取决于具体用例,开发人员利用位置参数的简洁性,并利用关键字参数在更复杂场景中增强的清晰度和灵活性。