为什么这个`random()`只执行一次?

时间:2012-11-03 20:39:31

标签: python

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument

from random import random

def printNumber(num=random()):
    print num

for i in range(10):
    printNumber()

我想看十个随机数,但十个随机数都是一样的!

2 个答案:

答案 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