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

Python 函数中的默认参数值

发布时间:2023-05-26 05:59:10

在Python函数中,默认参数值是指在定义函数时给参数设置的默认值,这样在调用函数时,如果没有传入对应参数的值,函数就会使用这个默认值,从而简化函数调用的方式。默认参数值在Python中非常常用,因为它们可以减少代码量,并提高代码的可读性和可维护性。

语法格式

在Python中,定义函数时设定默认参数值的语法格式为:

def function_name(param1=default_value1, param2=default_value2, param3=default_value3):

    # 函数体

其中,param1, param2, param3是需要传入的参数,default_value1, default_value2, default_value3是对应的默认参数值。

举例

下面是一个简单的函数例子,其中有两个参数,分别是name和age,age参数设置了默认值为18:

def print_info(name, age=18):

    print("name:", name)

    print("age:", age)

调用这个函数时,如果只传入name参数,那么age参数将会使用默认值18:

print_info("Tom")

输出结果为:

name: Tom

age: 18

如果传入了age参数,则会使用传入的参数值:

print_info("Tom", 20)

输出结果为:

name: Tom

age: 20

当然,你也可以同时传入两个参数值:

print_info("Tom", age=20)

同样输出结果为:

name: Tom

age: 20

需要注意的是,默认参数值只会按照函数定义时的顺序依次设置。如果在函数定义时后面有默认参数,而在函数调用时只传入了前面的参数,则默认参数将不会被赋值:

def print_info(name, age=18, gender="male"):

    print("name:", name)

    print("age:", age)

    print("gender:", gender)

print_info("Tom")

输出结果为:

name: Tom

age: 18

gender: male

这个例子中,虽然在定义函数时设置了一个默认参数gender="male",但是在调用函数时只传入了两个参数,因此gender参数保持默认值不变。

需要特别注意的是,当默认参数值是可变对象时,由于函数定义时只会执行一次,所以在多次调用函数时,如果在这个默认参数被修改了,那么会对后面的函数调用产生影响。例如:

def add_item(item, items=[]):

    items.append(item)

    return items

print(add_item("apple"))

print(add_item("banana"))

print(add_item("orange"))

输出结果为:

['apple']

['apple', 'banana']

['apple', 'banana', 'orange']

这个例子中,add_item函数有两个参数,分别是item和items,其中items默认值是一个空列表[]。如果在函数调用时只传入了item参数,则会把item添加到列表中,然后返回列表。在 次调用时,由于items列表是空的,默认参数值[]就会被赋值,并添加了"apple"后返回['apple']。然后在第二次调用时,由于默认参数值[]已经存在于内存中了,因此会继续使用这个列表,并添加"banana",然后返回['apple', 'banana']。在第三次调用时,依然是直接使用默认参数值[],并添加"orange",然后返回['apple', 'banana', 'orange']。可以看到,由于默认参数值是可变的,它们的值会一直存储在内存中,而不是在每次函数调用时重新生成,导致多次调用时存在的影响。

为了避免这个问题,需要把默认参数值设为不可变类型,例如None:

def add_item(item, items=None):

    if items is None:

        items = []

    items.append(item)

    return items

print(add_item("apple"))

print(add_item("banana"))

print(add_item("orange"))

输出结果为:

['apple']

['banana']

['orange']

这个改进后的例子中,在函数调用时如果没有传入items参数,而是使用了None,这时就新生成了一个空列表,并把item添加到这个列表中。在后面的多次调用中,由于没有使用默认参数值,而是用一个新生成的空列表,因此不会存在问题。

总结

Python函数中默认参数值的使用非常常见。在设计函数时,我们可以通过使用默认参数,来简化函数的调用方式。并且需要注意,默认参数值是在函数定义时计算一次,之后被重复使用,所以在设置默认参数值时,需要注意是不是可变对象。如果默认参数值是可变对象,那么需要设置一个None的默认值,然后在函数内部进行判断和处理。