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

Python中的默认函数参数是什么?

发布时间:2023-12-03 09:26:43

默认函数参数是指在定义函数时,为参数提供的默认值。当调用函数时,如果没有为该参数提供值,则使用默认值。在Python中,可以通过在函数定义时为参数赋值来设置默认参数。

在函数定义中,可以将默认参数放在非默认参数之后。例如:

def greet(name, greeting="Hello"):
    print(greeting, name)

greet("Alice")        # 输出:Hello Alice
greet("Bob", "Hi")    # 输出:Hi Bob

在上面的例子中,greeting 参数被设置为默认值 "Hello"。当只传入 name 参数时,函数会使用默认值 "Hello";当同时传入 namegreeting 参数时,函数会使用传入的值。

默认参数可以是任意的表达式,而不仅仅是简单的常数值。例如,可以将默认参数设置为一个列表或字典:

def process_data(data, options=None):
    if options is None:
        options = {}
    
    # 处理数据
    
    return result

result1 = process_data(data1)               # 不传入 options 参数
result2 = process_data(data2, options={})   # 传入空字典作为 options 参数
result3 = process_data(data3, options={"key": "value"})   # 传入自定义字典作为 options 参数

在上面的例子中,options 参数的默认值被设置为 None。然后在函数内部,使用 if 语句将其设为一个空字典,以防止在多次调用函数时,修改 options 参数的值会影响其它调用。

默认参数的值是在定义函数时计算的,而不是在每次函数调用时计算。这意味着如果默认参数是可变的,比如一个列表或字典,可能会遇到意料之外的行为。例如:

def add_number(num, numbers=[]):
    numbers.append(num)
    return sum(numbers)

result1 = add_number(1)        # 输出:1
result2 = add_number(2)        # 输出:3
result3 = add_number(3)        # 输出:6

在上面的例子中, numbers 参数默认值为一个空列表 []。在第一次调用 add_number 时,将数字 1 添加到了空列表中,得到结果 1。然后在后续的调用中,每次都会使用同一个列表,并将数字添加到其中。这导致每次调用函数都会改变列表的值,结果是所有数字的和。

为了避免这种问题,可以将可变类型的默认参数设为 None,然后在函数内部处理为一个新的实例。例如:

def add_number(num, numbers=None):
    if numbers is None:
        numbers = []
    numbers.append(num)
    return sum(numbers)

result1 = add_number(1)        # 输出:1
result2 = add_number(2)        # 输出:2
result3 = add_number(3)        # 输出:3

在上面的例子中,如果没有传入 numbers 参数,将其设为一个空列表 []。这样,每次调用函数时都会使用一个新的列表,避免了之前的问题。