59 函数参数——默认值参数

在定义函数时,Python 支持默认值参数,在定义函数时可以为形参设置默认值。

在调用带有默认值参数的函数时,可以不用为设置了默认值的形参进行传递,此时函数将会直接使用函数定义时设置的默认值,当然也可以通过显式赋值来替换其默认值。也就是说,在调用函数时是否为默认值参数传递实参是可选的,具有较大的灵活性,在一定程度上类似于函数重载的功能。

在定义带有默认值参数的函数时,任何一个默认值参数右边都不能再出现没有默认值的普通位置参数,否则会提示语法错误。

① 可以使用 “函数名. _ _ default _ _ ” 随时查看函数所有默认值参数的当前值,其返回值为一个元组,其中的元素依次表示每个默认值参数的当前值。

def say(message, times=1):
    print((message + ' ') * times)


print(say.__defaults__)
say('hello')
say('hello', 3)

在这里插入图片描述

多次调用函数并且不为默认值参数传递值时,默认值参数只在定义时进行一次解释和初始化。 对于列表、字典这样可变类型的默认值参数,这一点可能会导致很严重的逻辑错误,而这种错误或许会耗费大量精力来定位和纠正。

def func(v, s=[]):
    s.append(v)
    return s


print(func('5', [1, 2, 3, 4]))
print(func('c', ['a', 'b']))
print(func('a'))
print(func('b'))  # 注意这里的输出结果

在这里插入图片描述

使用列表作为默认参数,由于其可记忆性,连续多次调用该函数而不给该参数传值时,再次调用将保留上一次调用的结果。一般来说,要避免使用列表、字典、集合或其他可变序列作为函数参数默认值。

def func(v, s=None):
    if s is None:
        s = []
    s.append(v)
    return s


print(func('5', [1, 2, 3, 4]))
print(func('c', ['a', 'b']))
print(func('a'))
print(func('b'))  # 注意这里的输出结果

在这里插入图片描述

③ 如果在定义函数时某个参数的默认值为另一个变量值,那么参数的默认值只依赖于函数定义时该变量的值,或者说函数的默认值参数是在函数定义时确定值的,所以只会被初始化依次。

i = 3


def func(n=i):  # 参数n的值取决于i的当前值
    print(n)


func()

i = 5
func()

i = 7
func()


def func(n=i):  # 重新定义函数
    print(n)


func()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还记得那天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值