def buggy(arg, result=[]):
    print(result)
    result.append(arg)
    print(result)
buggy('a')
buggy('b')
buggy('c')
学到了新知识……
https://stackoverflow.com/questions/2335160/what-is-the-scope-of-a-defaulted-parameter-in-python
|  |      1WilliamYang      2018-05-11 00:12:09 +08:00 是有多无聊? | 
|      2pwrliang      2018-05-11 00:13:51 +08:00 via Android  1 我不认为这是无聊,这可能会是一个没有注意到的坑 | 
|      3shihira      2018-05-11 00:23:24 +08:00 对啊,函数的默认参数是属于静态变量来的,包括 doc 串 ``` def A(): 'i am A' pass help(A) a.__doc__ = "i am not A" help(A) ``` | 
|  |      4raptor      2018-05-11 00:23:41 +08:00 不要在参数默认值中使用引用类型这难道不应该是常识? | 
|  |      5lance6716      2018-05-11 00:54:54 +08:00 via Android  1 为什么要钻牛角尖…正常情况下根本不会出现这种代码 | 
|  |      6aice114      2018-05-11 00:57:47 +08:00 via Android 默认参数使用引用类型就是这样,以前看过一本 python 书还举了例子 | 
|  |      8vegito2002      2018-05-11 02:14:51 +08:00 我觉得这个还挺有意思的. | 
|  |      10aijam      2018-05-11 04:25:10 +08:00  3 这是 python 的知名坑 | 
|  |      11FrankFang128      2018-05-11 04:28:49 +08:00  1 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Default_parameters#%E4%BC%A0%E5%85%A5_undefined_vs_%E5%85%B6%E4%BB%96%E7%A9%BA%E5%80%BC 在函数被调用时,参数默认值会被解析,所以不像 Python 中的例子,每次函数调用时都会创建一个新的参数对象。 MDN 点名批评 Python | 
|  |      12aijam      2018-05-11 04:44:04 +08:00 @FrankFang128 这句话写的看起来有歧义 | 
|  |      13aipansiyouyun      2018-05-11 07:12:10 +08:00 via Android  1 又一个标题党 | 
|      14ryuzaki113      2018-05-11 08:46:11 +08:00 这个属于 Python 的坑,基本上都会踩到 | 
|  |      15mimzy      2018-05-11 09:00:21 +08:00 通常推荐使用 None 代替。基本上每个 Python 教程都会提到这个问题 比如官方入门: https://docs.python.org/3/tutorial/controlflow.html#default-argument-values | 
|      16lolizeppelin      2018-05-11 09:24:42 +08:00 via Android IDE 会警告的啊 | 
|      17siteshen      2018-05-11 09:30:51 +08:00 无数人讲过 python 默认参数的“坑”了,我提供另外一个思路,函数尽量不要有副作用。这样无论 python 内部怎么实现,都不会出现问题(当然如果是性能不足,肯定需要研究语言的实现机制)。 | 
|      18ybping      2018-05-11 09:32:55 +08:00 via iPhone python 一切都是对象 | 
|  |      19akiakiseofficial      2018-05-11 09:34:47 +08:00 via iPhone @aice114 fluent Python 有讲过 | 
|  |      20xiongshengyao      2018-05-11 09:38:45 +08:00 最开始学 python 的时候,你看的入门书籍里没告诉过你不要这样写? | 
|      22xmadi      2018-05-11 11:22:31 +08:00 via iPhone 我还以为这是常识  会写 python 都知道 | 
|  |      23mulog      2018-05-11 12:01:10 +08:00 每本 python 书应该都会讲到这个吧 | 
|  |      24lihongming      2018-05-11 12:34:07 +08:00 via Android  2 每学一门新语言,我都会认真研究变量的作用范围。 对 Python 来说,集合变量的作用范围是全局。 我以为上面两句都是常识 | 
|  |      25ech0x      2018-05-11 12:40:39 +08:00 via iPhone 这是坑,默认变量的坑…… | 
|  |      26bravecarrot      2018-05-11 13:35:43 +08:00 Python 入门必采坑+1 还有 深拷贝 浅拷贝 可迭代对象的元素是列表等 推荐 python cookbook,fluent python 你会发现 有意思的事还有很多 2333 | 
|  |      27hareandlion      2018-05-11 19:52:02 +08:00 via Android 默认参数不用可变类型,不讲这个的新手教程都不是好书 |