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

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中定义带有默认值的函数的方法,需要注意避免默认值被多次引用的问题。