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

Python中函数参数的默认值设置技巧

发布时间:2023-06-26 20:43:48

在 Python 中,我们可以给函数的参数设置默认值,这样当调用函数时如果没有传入该参数的值,则会使用默认值。这个特性在很多场景中都非常有用,尤其是在处理类似配置选项等需要设置默认值的场景。

下面列举一些参数默认值的设置技巧,供大家参考:

1. 设置参数默认值

最常见的方式就是在函数定义中使用赋值语句为参数设置默认值,例如:

def foo(name='Python', version=3.8):
    print(f"{name} {version}")

foo()  # 输出 "Python 3.8"
foo(version=3.7)  # 输出 "Python 3.7"

在调用函数时如果不传入参数,则会使用默认值;如果传入了参数,则会使用传入的值覆盖默认值。

2. 使用空列表作为默认值

有些场景中,我们需要在函数中对传入的参数进行添加、修改等操作,但是如果直接修改参数则可能会影响到外部变量。此时我们可以使用空列表作为参数默认值,然后在函数中创建一个新列表进行操作,例如:

def foo(lst=[]):
    lst.append(1)
    print(lst)

foo()  # 输出 [1]
foo()  # 输出 [1, 1]

第一次调用函数时会创建一个空列表作为默认值,第二次调用时则会直接使用上一次调用时创建的列表,从而导致出现了不符合预期的结果。为了解决这个问题,我们可以使用 None 作为默认值,然后在函数内部判断是否需要创建新的列表,例如:

def foo(lst=None):
    if lst is None:
        lst = []
    lst.append(1)
    print(lst)

foo()  # 输出 [1]
foo()  # 输出 [1]

这样就可以保证每次调用函数时都会创建一个新的列表。

3. 使用可调用对象作为默认值

在定义函数时我们可以使用可调用对象(例如函数)作为参数的默认值,这个可调用对象会在每次调用函数时被重新创建,并且只有在必要的时候才会被调用。例如:

def bar():
    print("bar")
    return []

def foo(lst=bar()):
    lst.append(1)
    print(lst)

foo()  # 输出 "bar" 和 [1]
foo()  # 只输出 [1]

第一次调用函数时会调用 bar 函数,并且将其返回值作为默认值,第二次调用时则直接使用第一次调用时返回的列表作为默认值,因此不会再调用 bar 函数。

4. 将参数默认值设置为不可变对象

如果我们希望在函数中修改参数值,但是不想影响到外部变量,则可以将参数默认值设置为一个不可变对象(例如数字、字符串、元组等),例如:

def foo(n=0):
    n += 1
    print(n)

foo()  # 输出 1
foo()  # 输出 1

由于数字是不可变对象,所以修改 n 的值不会影响到外部变量。

总体来看,Python 中函数参数的默认值设置非常灵活多样,可以应对各种场景的需求。在实际编程中,需要根据具体情况选择合适的方式来设置参数默认值。