默认函数参数具有导致意外行为的全局范围

时间:2016-04-24 02:45:43

标签: python

我有一个简单的python问题。请考虑以下代码。

import random

def int_list(local_list=[]):
    local_list.append(random.randint(0,1000))
    return local_list

for i in range(5):
    print(int_list())

在python2和python3下,结果是:

>> [828]
>> [828, 268]
>> [828, 268, 999]
>> [828, 268, 999, 471]
>> [828, 268, 999, 471, 847]

我原本期望得到以下结果:

>> [828]
>> [268]
>> [999]
>> [471]
>> [847]

显然,用于实例化local_list的对象具有全局范围,并且对于每次调用都是相同的。这不仅令我感到惊讶,而且似乎也是不正确或至少是不良行为。我认为这个问题之前已经提出过了。有人能指出我的理由吗?

0 个答案:

没有答案