首页 > 解决方案 > 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()

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

标签: pythonfunctionrandom

解决方案


调用函数时不会计算默认参数表达式,而是会在创建函数时对其进行计算。所以无论你做什么,你总是会得到相同的价值。

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

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

推荐阅读