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

Ran*_*lue 1 python

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

import random
def printRandom(randomNumber = random.randint(0, 10)):
    print randomNumber
Run Code Online (Sandbox Code Playgroud)

每次调用时都会打印相同的数字,不带参数.有没有办法randomNumber在不进行手动操作的情况下强制重新评估每个函数调用的默认值?以下是"手动"的含义:

import random
def printRandom(randomNumber):
    if not randomNumber:
         randomNumber = random.randint(0, 10)
    print randomNumber
Run Code Online (Sandbox Code Playgroud)

Kat*_*iel 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
Run Code Online (Sandbox Code Playgroud)

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

还有很多其他方法可以做到这一点,但没有理由不遵循惯例.