Python函数的默认参数及其使用方式
发布时间:2023-12-04 00:41:49
默认参数是在定义函数时,为参数提供一个默认值。当调用函数时,如果没有传递该参数的值,则使用默认值。
默认参数的使用方式有三种:
1. 位置参数和默认参数组合使用:在定义函数时,将默认参数放在位置参数之后。当调用函数时,如果不传递默认参数的值,则使用默认值;如果传递了默认参数的值,则使用传递的值。
def greet(name, age=18):
print("Hello", name)
print("You are", age, "years old")
greet("John")
greet("Alice", 20)
输出:
Hello John You are 18 years old Hello Alice You are 20 years old
2. 关键字参数和默认参数组合使用:在调用函数时,使用关键字参数来指定默认参数的值。
def greet(name, age=18):
print("Hello", name)
print("You are", age, "years old")
greet(name="John")
greet(name="Alice", age=20)
输出:
Hello John You are 18 years old Hello Alice You are 20 years old
3. 默认参数的值是可变对象:当默认参数的值是可变对象(如列表或字典)时,如果在函数内部对该对象进行修改,会影响到下一次函数调用时,默认参数的值。
def add_item(item, list=[]):
list.append(item)
return list
print(add_item(1))
print(add_item(2))
print(add_item(3))
输出:
[1] [1, 2] [1, 2, 3]
在上述代码中,每次调用add_item()函数时,如果没有传递默认参数的值,则使用默认列表[]。由于默认参数的值在函数定义时就已经创建,并且这个列表对象在每次函数调用时都是同一个,因此每次调用add_item()函数时,对默认列表进行的操作都会影响到下一次函数调用的默认列表。
为了避免这种问题,可以将默认参数的值设为None,并在函数内部判断参数是否为None,如果是,则将参数重新赋值为一个新的列表。
def add_item(item, list=None):
if list is None:
list = []
list.append(item)
return list
print(add_item(1))
print(add_item(2))
print(add_item(3))
输出:
[1] [2] [3]
通过将默认参数的值设为None,并在函数内部判断参数是否为None,可以避免默认参数的值在函数调用之间共享的问题。
