可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
from random import random
def printNumber(num=random()):
print num
for i in range(10):
printNumber()
我想看十个随机数,但十个随机数都是一样的!
答案 0 :(得分:4)
因为默认参数只执行一次,所以在编译函数时。
来自Docs:
你可以尝试这样的事情:当函数定义为时,将计算默认参数值 执行。这意味着表达式被评估一次,当时 定义函数,并使用相同的“预先计算”值 每次通话。 Ť
In [10]: def printNumber(num=None):
return num if num is not None else random()
....:
In [12]: printNumber()
Out[12]: 0.9620725546432438
In [13]: printNumber()
Out[13]: 0.8188258892156928
In [15]: printNumber(10)
Out[15]: 10
答案 1 :(得分:3)
因为它是在函数inststanciation执行的......而不是在函数调用
上执行正确的(呃)方式是
def printNumber(num=None):
if num == None:
num = random()
print num