在 python 中使用 globals() 操作变量

Manipulating variables using globals() in python

提问人:Sudhanshu Bharadwaj 提问时间:7/19/2022 更新时间:7/19/2022 访问量:25

问:

我希望可以选择以简洁的方式将我的论点传递给函数。因此,我没有直接传递所有参数,而是将它们作为参数函数定义包含在内,并将所有此类参数传递为 .然后我执行以下操作Common_Args

       for key, value in Common_args.items():
            if key in locals():
                globals()[key] = value

这就是问题所在。即使控件进入 if 条件(使用调试器检查),参数的值也不会更改,但它应该更改,对吧?指南已经确认这应该有效,如果我在调试器中运行单个语句,变量的值确实会发生变化。


我的函数定义更详细的是

def plotLFPData1Channel(plotHandles=None, channelString="", stimulus_list=None, folderName=None, analysisType=None,
                        timeVals=None, plotColor=None, blRange=None, stRange=None, referenceChannelString=None,
                        badTrialNameStr=None, useCommonBadTrialsFlag=None ,*,Common_args=None):
    # first we have to unpack common args
    if Common_args is not None:
        for key, value in Common_args.items():
            if key in locals():
                globals()[key] = value

我这样称呼这个函数

result=plotLFPData1Channel(plotHandles=ax.flatten(), channelString=analogChannelString, stimulus_list=stimValsToUse,analysisType=analysisType,Common_args=commonArgs)

commonArgs={"folderName":folderName , "timeVals":timeVals, "plotColor":plotColor, "blRange":blRange, "stRange":stRange, "referenceChannelString":referenceChannelString, "badTrialNameStr":badTrialNameStr, "useCommonBadTrialsFlag":useCommonBadTrialsFlag}

python 变量参数 传递 全局

评论

0赞 Thierry Lathuille 7/19/2022
您正在创建/修改与局部变量同名的全局变量,但局部变量保留其值,因此我在这里看不到任何令人惊讶的地方。不过,整个事情有点......奇怪。为什么不简单地用 ??plot...(**commonArgs)
0赞 Sudhanshu Bharadwaj 7/19/2022
即使使用 locals()[key]=value,也没有变化。如何使用 **kwargs 来实现此目的?基本上常见的参数是通常在运行之间不会更改的参数,因此我不希望函数调用看起来很大。
0赞 Thierry Lathuille 7/19/2022
当地人的文档明确指出:“本词典的内容不应修改;更改可能不会影响解释器使用的局部变量和自由变量的值。其余的,stackoverflow.com/questions/1769403/...stackoverflow.com/questions/36901/......

答: 暂无答案