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

2024-09-29 02:29:26 发布

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

我有一系列的变量如下所示:

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")

Tags: 函数绘图fortitleplthemoleculeo3
3条回答

如果不使用变量而使用字典,则可以简单地用每个项的名称为字典编制索引。比如:

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

有很多方法可以检查脚本的变量名,但这里的方法似乎过于简单,因为您可以用它的名称和“函数”构造一个字典,然后直接调用它。使用键作为所需名称,值作为函数:

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)

使用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

相关问题 更多 >