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

在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]

posted @ 2017-12-21 15:47  fyter  阅读(283)  评论(0编辑  收藏  举报