欢迎访问宙启技术站
智能推送

Python函数中的默认参数和可变参数:一次搞定

发布时间:2023-06-23 00:07:32

Python是一种高级编程语言,其函数功能强大,深受程序员和数据科学家的喜爱。本文将解释Python中的两种函数参数:默认参数和可变参数。

默认参数

默认参数是在函数定义时为参数提供默认值。这样做的好处是,当调用函数时,可以省略这些参数的值。如果省略了参数值,则使用其默认值。下面是一个示例:

def power(num, power=2):
    return num ** power

这个函数有两个参数:num和power。第二个参数是默认的,当未提供值时,将使用2作为默认值。如果我们调用该函数,而不指定power:

print(power(3))

输出将为9,因为 power(3) 其实是 power(num=3, power=2) 的简写。

在这里有几点需要注意。首先,如果您定义一个函数,您应该尽可能地为每个参数提供默认值。这样做可以使代码更加容易读懂,同时避免许多奇怪的情况。也就是说,如果我们将上面的 power 函数写成这个样子:

def power(num=1, power=2):
    return num ** power

无论我们提供什么参数,都不会出错。但是这种方法可能会使代码变得更容易出错,因为您永远不会真正知道函数中的参数是什么。这种编码方式非常不好。

第二点需要注意的是,如果您为参数提供默认值,则应该始终将非默认参数放在前面,将默认参数放在后面。这是因为如果您提供了一个默认参数,则需要通过参数名称来指定非默认参数的值。例如:

def add_numbers(a, b=0):
    return a + b

print(add_numbers(1))      # 输出 1
print(add_numbers(1, 2))   # 输出 3

如果我们将 add_numbers(1,2) 写成 add_numbers(2,1),我们将得到意想不到的结果,因为 2 先被分配给 b,而不是 a。

可变参数

可变参数是指函数可接受任意数量的参数,不过,我们之前学习的函数都是只能接受固定数量参数的。注意,可变参数只能在参数列表的末尾进行定义。在Python中,可变参数可以使用以下两种方式之一表示:

* 使用语法 *args 表示参数将作为元组传入函数。

* 使用语法 **kwargs 表示参数将作为字典传入函数。

下面分别举几个例子:

def add(*args):
    return sum(args)

print(add(1, 2, 3, 4, 5)) # 输出 15

在这个函数中,*args 表示这个函数可以接受任意数量的参数,并且把这些参数全部放在一个元组中。因此,在调用函数时,可以通过逗号将所有要添加的数字分开,这些数字被传递给函数,并被添加在一起。

另一方面,如果我们使用 **kwargs

def print_dict(**kwargs):
    for k, v in kwargs.items():
        print(f"{k} = {v}")

print_dict(name="John Smith", age=30, city="New York")

这个函数将返回:

name = John Smith
age = 30
city = New York

在这个函数中,**kwargs 表示这个函数可以接受任意数量的命名参数,并将它们放入一个字典中。在这个函数中,我们使用 for 循环打印字典中的每一对键值对。

注意,*args**kwargs 可以同时存在,并且通常是这样使用的:

def my_function(*args, **kwargs):
    pass

这个函数可以接受任意数量的未命名和命名参数。所有未命名的参数将被收集到一个元组中,而所有命名的参数将被收集到一个字典中。

在编写函数时,使用默认参数和可变参数可以使代码更加灵活和易于维护。在学习Python函数时,请牢记这些重要的概念。