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

Python函数的默认参数和可变参数:详细解释

发布时间:2023-06-25 10:50:53

Python是一种高级编程语言,它具有丰富的函数功能,包括默认参数和可变参数。默认参数是指函数可以在定义时指定默认值,这样在调用函数时,如果没有传递该参数,则会使用默认值。可变参数是指函数接受任意数量的参数,这些参数在函数内部表现为元祖或者列表,在调用函数时可以传递不同数量的参数。

Python中定义函数时可以指定默认参数,例如:

def func(a, b=0):
    return a + b

在上面的函数中,b指定了默认值为0。当调用该函数时,如果只传递一个参数a,则b将会使用默认值0:

print(func(1))  # 输出1
print(func(1, 2))  # 输出3

当然,也可以指定一个不同的默认值:

def func(a, b='default'):
    return a + b
 
print(func(1))  # 输出default
print(func(1, 'new_value'))  # 输出new_value

需要注意的是,默认参数的值只会在定义函数时被计算一次,这意味着如果默认参数是可变对象,例如字典或列表,这些对象会被所有函数调用共享。比如以下代码:

def func(a, arr=[]):
    arr.append(a)
    return arr
 
print(func(1))  # 输出[1]
print(func(2))  # 输出[1, 2]
print(func(3))  # 输出[1, 2, 3]

这是因为在 次调用函数时,arr为空列表,但在后面的调用中,arr仍然指向同一个空列表。

为了避免这种情况,可以将默认参数改为None,并在函数内部创建一个新的列表:

def func(a, arr=None):
    if arr is None:
        arr = []
    arr.append(a)
    return arr
 
print(func(1))  # 输出[1]
print(func(2))  # 输出[2]
print(func(3))  # 输出[3]

接下来,我们来看看Python中的可变参数。在函数中定义可变参数需要在参数名称前面加上一个*。例如:

def func(*args):
    return sum(args)
 
print(func(1, 2, 3))  # 输出6
print(func(4, 5, 6, 7))  # 输出22

在这个函数中,args是一个元组,包含所有传递的参数。在这个例子中,我们将所有参数的和返回。

除了*args,我们还可以使用**kwargs来接收关键字参数。这些参数在函数中以字典的形式出现。例如:

def func(**kwargs):
    for key, value in kwargs.items():
        print(key, value)
 
func(a=1, b=2, c=3)  # 输出a=1, b=2, c=3

在这个函数中,kwargs是一个字典,包含所有关键字参数。我们可以使用for循环遍历这个字典,并打印出每个键值对。

总结一下,Python中的函数可以定义默认参数和可变参数。默认参数可以在函数定义时指定默认值,可变参数允许我们传递任意数量的位置参数或关键字参数。学会合理运用这些功能,可以大大提高函数的灵活性和可重用性。