Вызов имени переменной в виде строки для функции цикла - PullRequest
0 голосов
/ 19 октября 2018

У меня есть ряд переменных, которые выглядят так:

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

И функция работает просто отлично, но я не хочу иметь тонну строк, где я просто вызываю функцию для каждой из переменных, поэтому я помещаю переменные в массив и вцикл я вызываю функцию.Как вызвать имя переменной, которая является вторым входом функции abslines?

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

Ответы [ 4 ]

0 голосов
/ 19 октября 2018

Проще всего использовать встроенную в Python функцию map():

>>> map(lambda n: abslines(n, 'i'), absarray)

(6562.8, 'i')
(4861, 'i')
(8498, 'i')
(8542, 'i')
(8662, 'i')
(5008.24, 'i')
0 голосов
/ 19 октября 2018

Если вместо переменных вы используете словарь, вы можете просто индексировать словарь по названию каждого элемента.Нравится:

abs = {
    # optional init - may or may not be useful:
    "halpha": 0,
    "hbeta": 0,
    ...
}
...
abs["halpha"] = ...
...
for name in abs:
    abslines(abs[name], name)
0 голосов
/ 19 октября 2018

Используйте диктовку, пропустите переменные, которые просто содержат какой - вес молекулы?

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

0 голосов
/ 19 октября 2018

Есть способы проверить имя переменной скрипта, но здесь это кажется чрезмерным, так как вы можете создать словарь с его именем и «функцией» и просто вызвать его.Используйте клавишу для нужного имени и значение для функции:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...