【发布时间】:2019-09-24 17:16:03
【问题描述】:
- 已编辑以考虑初始反馈
要对模型中的某些参数进行敏感性分析,我想覆盖并重新定义单个变量。这个变量可以由用户手动选择。我无法让覆盖工作。
目前,我主要关注将 locals() 或 globals() 设置为正确的值,但如下所示。这不起作用。
我的代码有两个重要部分:首先是 Main 函数,负责创建模型的所有工作。它有很多变量,如图所示:Wave_height
def Main(loopname, loopvalue = 0):
Wave_height = 2 #m
# And_many_other_characteristics
# redefine one single variable name
vars()[loopname] = loopvalue
globals()[loopname] = loopvalue
locals()[loopname] = loopvalue
print (Wave_height)
return_info = 1 ## rows of code i dont want to bother you with ##
return(return_info)
if __name__ == "__main__":
Main("testname", 0)
对于敏感性分析,我希望所有变量都保持不变,除了一个变量。假设我想改变 Wave_height。我想做如下代码:
import Main
import numpy as np
loopname = "Wave_height"
loopvalue = [1,2,3]
max_z_displacement = np.zeros(len(loopvalue))
for i in range (len(loopvalue)):
return_info = Main.Main(loopname, loopvalue[i])
max_z_displacement[i] = return_info[2]
目前打印如下:
2
我希望得到的结果是:
1
我想避免在 def-row 中使用 50 个不同的变量,因为那样不会使其易于使用。
【问题讨论】:
-
代替动态变量,使用包含所有参数的字典,并传递字典键。
-
感谢您的帮助,但是使用它超出了我目前对python的理解水平。我在网上多次读到动态变量是一个坏主意,但在我的情况下,它是“快速而肮脏”的方法来获得我想要获得的东西。你有没有建议如何在不需要使用完整字典的情况下提供所需的结果?
-
您尝试的方法比使用字典高级得多,而且几乎可以肯定是错误的方法。
-
那么我将如何使用字典从主函数外部获取单个参数的所需更改?如果我可以将变量的名称作为字符串的直接输出,我就可以解决了。这就是为什么我认为我的方法很容易实现。
-
使用
params[loopname]而不是globals()[loopname],其中params是保存参数的变量。也不需要str('{}'.format(loopname))。loopname已经是一个字符串。
标签: python variables global local