Python中如何定义参数的默认值?
在Python中,我们可以为函数的参数定义一个默认值,这样当函数被调用时,如果调用者没有为这个参数提供值,那么就会使用这个默认值。
定义参数的默认值非常简单,我们只需要在定义函数时,为参数赋值即可,例如:
def func(a, b=10):
print(a, b)
上面的代码中,我们为参数b指定了默认值10,这意味着当我们调用func函数时,如果没有为b提供值,那么它会被默认设置为10。
下面来看几个例子,更加理解参数默认值的用法。
### 例子1
def greet(name, greeting="Hello"):
print(greeting, name)
greet("John") # 输出:Hello John
greet("Emily", "Hi") # 输出:Hi Emily
在上面的例子中,我们定义了一个greet函数,该函数有两个参数:name和greeting。在函数定义时,我们为greeting参数设置了默认值"Hello"。
当我们调用greet函数时,如果只传递一个参数name,则函数会使用默认值"Hello"来输出问候语。
如果我们传递了两个参数name和greeting,则函数会使用我们传递的greeting值来输出问候语。
### 例子2
def power(x, n=2):
result = 1
for i in range(n):
result *= x
return result
print(power(3)) # 输出:9
print(power(3, 3)) # 输出:27
上面的例子中,我们定义了一个power函数,该函数有两个参数:x和n。在函数定义时,我们为n参数设置了默认值2。
当我们调用power函数时,如果只传递一个参数x,则函数会使用默认值n=2来计算x的平方。
如果我们传递了两个参数x和n,则函数会使用我们传递的n值来计算x的n次方。
### 例子3
def foo(lst=[]):
lst.append(len(lst))
return lst
print(foo()) # 输出:[0]
print(foo()) # 输出:[0, 1]
print(foo()) # 输出:[0, 1, 2]
在上面的例子中,我们定义了一个foo函数,该函数有一个参数lst,它的默认值是一个空列表。
当我们调用foo函数时,如果没有传递lst参数,那么函数会使用默认值[]来创建一个空列表,并向其中添加一个元素(该元素为lst的长度)。
然后,我们每次再次调用foo函数时,函数会返回之前的列表,并在其末尾添加一个新的元素。
需要注意的是,在这个例子中,我们发现每次调用foo函数时,都返回了不同的结果。这是因为我们使用了可变类型作为默认参数值,每次调用函数时,这个默认参数值都是同一个对象,因此它们会互相影响。如果不希望出现这样的问题,我们可以使用不可变类型作为默认参数,如下所示:
def foo(lst=None):
if lst is None:
lst = []
lst.append(len(lst))
return lst
print(foo()) # 输出:[0]
print(foo()) # 输出:[0]
print(foo()) # 输出:[0]
在这个例子中,我们在函数内部检查lst是否为None,如果是,则创建一个新的空列表,并将其赋值给lst。这样,每次调用函数时,都会使用新创建的列表。
