您当前的位置:首页 > 计算机 > 编程开发 > Python

Python函数默认值参数的2个坑

时间:12-23来源:作者:点击数:

在定义函数时,Python支持默认值参数,在定义函数时可以为形参设置默认值。在调用带有默认值参数的函数时,可以不用为设置了默认值的形参进行传值,此时函数将会直接使用函数定义时设置的默认值,当然也可以通过显式赋值来替换其默认值。也就是说,在调用函数时是否为默认值参数传递实参是可选的,具有较大的灵活性。例如:

>>> def say( message, times =1 ):

             print((message+' ') * times)

>>> say('hello')

hello

>>> say('hello', 3)

hello hello hello

好了,下面重点介绍默认值参数的坑,虽然说是两个坑,但实际上是一个意思。

(1)默认值参数的值是在函数定义时确定的

>>> i = 3

>>> def f(n=i): #参数n的值仅取决于i的当前值

             print(n)

>>> f()

3

>>> i = 5 #函数定义后修改i的值不影响参数n的默认值

>>> f()

3

>>> i = 7

>>> f()

3

>>> def f(n=i): #重新定义函数

            print(n)

>>> f()

7

(2)默认值参数只初始化一次

如果参数的默认值是数字、字符串、元组或其他不可变类型的数据,并不会有什么影响,但是如果参数的默认值是列表、字典、集合等可变类型数据的话,这里有个大坑。

>>> def demo(newitem, old_list=[]):

            old_list.append(newitem)

            return old_list

>>> print(demo('5', [1, 2, 3, 4]))

[1, 2, 3, 4, '5']

>>> print(demo('aaa', ['a', 'b']))

['a', 'b', 'aaa']

>>> print(demo('a'))

['a']

>>> print(demo('b')) #注意这里的输出结果

['a', 'b']

如果想得到正确结果,建议把函数写成下面的样子:

def demo(newitem, old_list=None):

    if old_list is None:

        old_list = []

    old_list.append(newitem)

    return old_list

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门