1

可能的重复:
Python 中的“Least Astonishment”:可变默认参数

from random import random

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

for i in range(10):
    printNumber()

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

4

2 回答 2

4

因为默认参数仅在编译函数时执行一次。

文档

执行函数定义时评估默认参数值。这意味着表达式在定义函数时被计算一次,并且每次调用都使用相同的“预计算”值。吨

你可以尝试这样的事情:

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
于 2012-11-03T20:40:39.683 回答
3

因为它是在函数实例化时执行的......而不是在函数调用时

正确的(呃)方式是

def printNumber(num=None):
     if num == None:
         num = random()
         print num
于 2012-11-03T20:41:09.227 回答