Python函数默认参数随机值

mus*_*shi 3 python random function

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

import random

for i in range(10):
    print(random.randint(0,10))
Run Code Online (Sandbox Code Playgroud)

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

import random

def f(val: int = random.randint(0,10)):
    print(val)

for i in range(10):
    f()
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*som 6

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

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

def f(val=None):
    if val is None:
        val = random.randint(0,10)
    print(val)
Run Code Online (Sandbox Code Playgroud)