Python 强制对函数调用进行默认重新评估

Python 强制对函数调用进行默认重新评估,python,Python,好的,Python在声明时只对函数的默认值求值一次。因此,调用以下函数printRandom import random def printRandom(randomNumber = random.randint(0, 10)): print randomNumber 每次调用时都将打印相同的数字,不带参数。是否有一种方法可以在每次函数调用时强制重新评估默认值randomNumber,而无需手动执行?以下是我所说的“手动”的意思: 否。默认参数是在执行时设置的,也就是在定义函数时设置的

好的,Python在声明时只对函数的默认值求值一次。因此,调用以下函数
printRandom

import random
def printRandom(randomNumber = random.randint(0, 10)):
    print randomNumber
每次调用时都将打印相同的数字,不带参数。是否有一种方法可以在每次函数调用时强制重新评估默认值
randomNumber
,而无需手动执行?以下是我所说的“手动”的意思:


否。默认参数是在执行时设置的,也就是在定义函数时设置的。如果希望重新执行它们,则需要重新定义函数

你应该使用的标准习语是

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
(单例)的使用,
是对象标识的测试。如果不是随机数,则不应使用
,因为有许多值的计算结果为布尔值false,尤其是
0


有很多其他方法可以做到这一点,但没有理由不遵循约定。

否。默认参数是在执行时设置的,也就是在定义函数时设置的。如果希望重新执行它们,则需要重新定义函数

你应该使用的标准习语是

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
(单例)的使用,
是对象标识的测试。如果不是随机数,则不应使用
,因为有许多值的计算结果为布尔值false,尤其是
0

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

使用
None

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

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

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

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

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

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

谢谢
random\u number==None
random\u number=None
之间的区别是什么?他在回答中已经说过:
is
是对对象身份的测试,而
=
检查两个对象是否相等
1.0是1==False
,而
(1.0==1)==True
。这是a:p。简而言之,
=
测试对象在语义上是否相等(即持有相同的数据),
is
测试它们是否是相同的对象。与
None
相比,您应该使用
is
;这是您应该这样做的少数情况之一:p.您可能永远看不到
==None
is None
之间代码的差异,但这是可能的:重写
\uuueq\uuuuuu
的类可能会与
None
比较(请参阅)。但一般来说,您应该在这里使用
is
,因为PEP8说要。谢谢!
random\u number==None
random\u number=None
之间的区别是什么?他在回答中已经说过:
is
是对对象身份的测试,而
=
检查两个对象是否相等
1.0是1==False
,而
(1.0==1)==True
。这是a:p。简而言之,
=
测试对象在语义上是否相等(即持有相同的数据),
is
测试它们是否是相同的对象。与
None
相比,您应该使用
is
;这是您应该这样做的少数情况之一:p.您可能永远看不到
==None
is None
之间代码的差异,但这是可能的:重写
\uuueq\uuuuuu
的类可能会与
None
比较(请参阅)。但一般来说,您应该在这里使用
is
,因为PEP8说。