python 默认形参为可变对象

一、 什么是默认形参

        在定义函数时参数=’XXX‘时,此时调用时可以不给参数赋值,如f(param='default_param'),调用时f();

函数定义默认参数之后,之后的所有的形参都得是默认参数,如f(c, a='a', b='b')。

二、 默认参数为可变对象

如下:

>>> def test(a=[]):
...    a.append('a')
...    return a
... 
>>> print(test())
['a']
>>> print(test())
['a', 'a']
>>> print(test())
['a', 'a', 'a']
>>> 

默认形参值会在执行函数定义时按从左至右的顺序被求值。 这意味着当函数被定义时将对表达式求值一次,相同的“预计算”值将在每次调用时被使用,为避免这种情况应该在函数中显式的赋值可变对象,如下:

def test(a=None):
    if a is None:
        a = []
    a.append('a')
    return a

 

你可能感兴趣的:(python)