Python 函数默认参数随机值



在下面的代码中,将按预期生成一个随机值:

import random
for i in range(10):
print(random.randint(0,10))

但是,如果我使用函数,这不起作用:

import random
def f(val: int = random.randint(0,10)):
print(val)
for i in range(10):
f()

为什么第二个代码片段的结果总是相同的数字?我能找到的最相似的问题是这个问题,但它指的是一种不同的语言(我不掌握(。

调用函数时不计算默认参数表达式,而是在创建函数时计算默认参数表达式。 因此,无论您做什么,您都将始终获得相同的价值。

解决此问题的典型方法是使用标志值并将其替换在函数主体中:

def f(val=None):
if val is None:
val = random.randint(0,10)
print(val)

您需要将默认值设置为特定值。要使其像这样动态,您需要将其默认为其他内容,检查该值,然后更改值。

例如:

import random
def f(val=None):
if val is None:
val = random.randint(0,10)
print(val)
for i in range(10):
f()

默认参数无法在调用时更改。 我不明白为什么需要它。 你可以像这样简单地做。

import random
def f():
print(random.randint(0,10))
for i in range(10):
f()

最新更新