python - 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)
推荐阅读
- filter - 带有过滤器的 PowerBI groupby
- node.js - 无法在定义的类和数据源 apollo-server-express 中访问 this.context
- r - 如何重命名R中的列
- javascript - 即使我在系统的另一部分使用相同代码的副本,XMLHttpRequest open() 函数也不起作用
- excel - 将有重复的两列合并为没有重复的两列
- javascript - 如何使用来自 Angular 中的组件的发布请求打开一个新选项卡
- c# - 如何更改 Xamarin.UWP 中 TableView TableSection 中的 TextSize 和大小写
- r - 新输入的 R 比例函数
- angular - 转到另一个页面时,角度服务中的数组重置为零
- python - 具有部分函数的动态python类