Python访问错误的键

2024-06-26 13:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用dictionary作为if/elif结构的替代方案,如下所示:

newValue = {
    'int': param.value + (random.choice((-1, 1)) * 
        random.randint(1, param.maxChange)),
    'float': param.value + random.uniform(-param.maxChange,
            param.maxChange),
    'bool': not param.value
}[param.dataType]

但是当param.dataType'float'时,它访问'int'值。如果我使用if/elif结构,它将按预期工作。在

^{pr2}$

dict表格可能有什么问题?我使用的是python2.7

编辑:并不是因为它访问了错误的键。我得到一个属于'int'代码块的异常,所以我认为它试图将值从'int'赋值给newValue。在


Tags: dictionaryifparamvalue方案randomfloat结构
1条回答
网友
1楼 · 发布于 2024-06-26 13:57:41

在代码中,首先实例化字典,然后添加'int''float'和{}条目。作为添加条目的一部分,将计算intparam.value + (random.choice((-1, 1)) * random.randint(1, param.maxChange))的表达式以及其他表达式。如果参数的数据类型不正确,这将导致问题。要解决这个问题,您可以尝试以下方法:(未测试,因为您没有提供有效的示例)

newValue = {
    'int': lambda param: param.value + (random.choice((-1, 1)) * 
        random.randint(1, param.maxChange)),
    'float': lambda param: param.value + random.uniform(-param.maxChange,
            param.maxChange),
    'bool': lambda param: not param.value
}[param.dataType](param)

现在,条目保存lambda函数,代码只应在调用一次时求值。在

此外,每次运行此代码时都会创建字典。如果这部分代码运行多次,那么创建一次字典然后多次使用它应该更有效。在

相关问题 更多 >