Python中如何定义带有默认值的函数?
发布时间:2023-06-10 13:54:19
Python中定义函数时可以为参数设置默认值,这样调用函数时可以不必为该参数传递值。在参数列表中,使用赋值符号“=”可以为参数设置默认值。例如:
def greet(name="World"):
print(f"Hello, {name}")
该函数接收一个参数,如果没有给出参数,则使用默认值“World”作为参数值。可以这样调用该函数:
greet() # 输出 "Hello, World"
greet("Alice") # 输出 "Hello, Alice"
使用默认值的参数必须放在参数列表的最后,否则会导致错误。例如:
def greet(age, name="World"):
print(f"{name} is {age} years old")
greet("Alice") # TypeError:greet() missing 1 required positional argument: 'age'
在上面的例子中,省略必需参数“age”导致了TypeError。正确的做法应该是:
greet(25) # 输出 "World is 25 years old" greet(25, "Alice") # 输出 "Alice is 25 years old"
需要注意的是,在定义函数时默认值是被求值的,这意味着如果默认值是可变对象,它在多次函数调用之间可能不会按预期改变。例如:
def append(item, lst=[]):
lst.append(item)
return lst
print(append(1)) # 输出 [1]
print(append(2)) # 输出 [1, 2](而不是期望的[2])
这里的问题是默认值[]是可变的列表对象,由于Python只会对可变列表对象进行一次求值,因此在不同的函数调用之间,它将继续被引用。这可以通过创建一个新的、可变的默认值来避免。例如:
def append(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst
print(append(1)) # 输出 [1]
print(append(2)) # 输出 [2]
以上是Python中定义带有默认值的函数的方法,需要注意避免默认值被多次引用的问题。
