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