python趣味 ——奇葩的全局形参

时间:2020-12-09 06:11:30

在c++,c#,js等语言中:

函数定义(参数)

函数体:参数修改

这里的参数修改都是仅限于这个函数体内的

python不知道是不是bug,我们这样写:

def test(a=[]):
a.append(1);print(a)

然后多次执行test函数:
>>> test()
[1]
>>> test()
[1, 1]
>>> test()
[1, 1, 1]
>>> test()
[1, 1, 1, 1]

你会发现输出的值在变,这是个有趣的坑——形参在变。

>>> test([2])

这并不会影响这个全局形参的值,再次调用默认参数的test:

>>> test()

[1, 1, 1, 1, 1]