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

在Python中如何定义带有默认参数的函数?

发布时间:2023-05-22 17:01:06

在Python中,我们可以使用默认参数定义函数来使函数更加灵活。默认参数是指在函数定义时,给某个参数设置一个默认值。如果在调用函数时没传入该参数,就会使用默认值。

默认参数的语法格式是在函数定义时给参数设置默认值,如下所示:

def function(a, b=10, c=5):
    # function body

在这个例子中,bc都是默认参数,因为它们有默认值,但a不是默认参数,因为它没有默认值。如果你调用这个函数并省略某些参数,则省略的参数将使用默认值。

function(3) # a=3, b=10, c=5
function(3, 7) # a=3, b=7, c=5
function(3, 7, 2) # a=3, b=7, c=2

注意,如果你传递了一个默认参数的值,它将覆盖默认值。

function(3, b=12) # a=3, b=12, c=5
function(3, c=7) # a=3, b=10, c=7

此外,你可以像在函数定义中显示的写参数名,或使用值的位置。

function(3, c=4, b=6) # a=3, b=6, c=4
function(3, 7, c=9) # a=3, b=7, c=9
function(3, b=8, c=2) # a=3, b=8, c=2

但请注意:默认值应该是不可变的对象(如字符串、数字、元组),如果你将默认值参数设置为可变对象(如列表或字典),可能会遇到意想不到的问题。

def function(a, b=[]): # This is not good!
    b.append(a)
    print(b)

function(1) # [1]
function(2) # [1, 2]
function(3) # [1, 2, 3]

应该这样:

def function(a, b=None):
    if b is None:
        b = []
    b.append(a)
    print(b)

function(1) # [1]
function(2) # [2]
function(3) # [3]

这是因为Python在模块导入时只解释一次默认参数。如果默认参数是一个对象,则每次调用它时都会修改它。如果默认参数是可变的,则它将会像静态变量一样,保留先前的状态。

总之,Python的默认参数可以使函数定义更加简洁和灵活,但需要注意它们的默认值应该是不可变的,否则,可能会遇到意想不到的问题。