在函数调用上强制默认重新评估

时间:2012-01-17 13:42:21

标签: python

AFAIK,Python在声明时仅评估一次函数的默认值。所以调用以下函数printRandom

import random
def printRandom(randomNumber = random.randint(0, 10)):
    print randomNumber

每次调用时都会打印相同的号而不带参数。有没有办法在每个函数调用时强制重新评估默认randomNumber而不手动执行?以下是“手动”的意思:

import random
def printRandom(randomNumber):
    if not randomNumber:
         randomNumber = random.randint(0, 10)
    print randomNumber

3 个答案:

答案 0 :(得分:6)

没有。默认参数在执行时设置,即定义函数时。如果您希望重新执行它们,则需要重新定义该函数。

标准习语和你应该使用的习惯是

import random
def print_random(random_number=None):
    if random_number is None:
        random_number = 4 # chosen by fair dice roll.
                          # guaranteed to be random.
    print random_number

请注意使用None(单例)和is测试对象标识。您不应该使用if not random_number,因为有许多值计算为布尔值false - 特别是0

还有很多其他方法可以 这样做,但没有理由不遵守惯例。

答案 1 :(得分:3)

使用None

def printRandom(randomNumber=None):
    if randomNumber is None:
        randomNumber = random.randint(0, 10)
    print randomNumber

答案 2 :(得分:2)

我认为最好的办法是将None定义为randomNumber的默认值。

def printRandom(randomNumber=None):
    if randomNumber is None:
        print random.randint(0, 10)
    else:
        print randomNumber