在for循环函数中将变量名作为字符串调用

时间:2018-10-19 20:25:22

标签: python loops for-loop variables

我有一系列看起来像这样的变量:

halpha = 6562.8
hbeta = 4861
ca1 =  8498
ca2 = 8542
ca3 =  8662
o3 = 5008.240

我在这里具有绘图功能:

def abslines(molecule,title):
    plt.axvline(molecule, color = "r", label=title)
    plt.text(molecule-100, 40, title,rotation=90,fontsize=20)

它在输入看起来像这样时起作用:

abslines(he,"he")

该函数工作正常,但是我不想在很多行中只为每个变量调用该函数,所以我将变量放入数组中,然后在for循环中调用功能。如何调用变量名,它是abslines函数的第二个输入?

absarray = [halpha,hbeta,ca1,ca2,ca3,o3,na,mg,he]
for i in absarray:
    abslines(i,"i")

4 个答案:

答案 0 :(得分:2)

有很多方法可以检查脚本的变量名,但是这里似乎已被淘汰,因为您可以用它的名称和“函数”构造一个字典并直接调用它。使用该键输入所需的名称,然后将该值用作函数:

absarray = {"halpha":halpha,"hbeta":hbeta,"ca1":ca1,"ca2":ca2,"ca3":ca3,"o3":o3,"na":na,"mg":mg,"he":he}

for k,v in absarray.items():
    abslines(v,k)

答案 1 :(得分:1)

如果您使用字典而不是变量,则可以简单地使用每个项目的名称索引字典。喜欢:

abs = {
    # optional init - may or may not be useful:
    "halpha": 0,
    "hbeta": 0,
    ...
}
...
abs["halpha"] = ...
...
for name in abs:
    abslines(abs[name], name)

答案 2 :(得分:0)

使用dict,跳过仅包含什么的变量-分子量?

from  matplotlib import pyplot as plt

data = { "halpha" : 6562.8, "hbeta" : 4861,   "ca1" :  8498,
         "ca2"    : 8542,   "ca3"   :  8662,  "o3"  : 5008.240,  }

def abslines(molecule,title):
    plt.axvline(molecule, color = "r", label=title)
    plt.text(molecule-100, 0.40, title,rotation=90,fontsize=20) # fix  y

for b,a in data.items():
    abslines(a,b)

plt.show()

获得

pic

答案 3 :(得分:0)

最简单的方法可能是使用python内置的map()函数:

OMPI_SKIP_MPICXX