如何从外部重新定义函数中的变量?

2024-10-01 09:30:45 发布

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

  • 编辑以考虑初始反馈

为了对模型中的一些参数进行敏感性分析,我想覆盖并重新定义一个变量。此变量可由用户手动选择。我无法使覆盖工作。你知道吗

目前,我主要关注如何将locals()或globals()设置为正确的值,如下所示。这不管用。你知道吗

我的代码有两个重要部分:首先是Main函数,完成创建模型的所有工作。它有许多变量,其中一个变量是:波高

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)

对于敏感性分析,我希望所有变量都是常量,除了一个变量。假设我想改变波高。我想执行以下代码:

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行中使用50个不同的变量,因为这样不便于使用。你知道吗


Tags: 代码nameimportinforeturnmaindefnp
1条回答
网友
1楼 · 发布于 2024-10-01 09:30:45

若要使调用的函数看起来自然,请将参数打包到其他无特征的对象中:

class Parameters(object):
  def __init__(self,**attr): vars(self).update(attr)
def calc(**over):
  p=Parameters(Wave_height=2,…)
  vars(p).update(over)
  do_stuff(p.Wave_height,…)
  do_more(p.other_data)
  …

for h in heights:
  calc(Wave_height=h)
  calc(**{"Wave_height":h})  # to choose parameter dynamically

相关问题 更多 >