Как использовать функцию, которая возвращает списки в качестве входных данных для другой функции? - PullRequest
0 голосов
/ 11 октября 2018

Сначала я написал функцию, которая взяла 18 аргументов и превратила их в 6 разных списков.Вот код:

def list_maker(val1,val2,val3,val4,val5,val6,val7,val8,val9,por1,por2,por3,hth1,hth2,hth3,sat1,sat2,sat3):

#Make the voip list
list1 = [val1,val2,val3]
list2 = [val4,val5,val6]
list3 = [val7,val8,val9]

#Make the variable list
list_por = [por1,por2,por3]
list_hth = [hth1,hth2,hth3]
list_sat = [sat1,sat2,sat3]

return list1,list2,list3,list_por,list_hth,list_sat

Эта часть работала очень хорошо (я сделаю так, чтобы она выглядела лучше, как только она действительно заработает).Теперь моя идея заключалась в том, чтобы использовать эту функцию в качестве входных данных для этой другой функции прямо ниже для создания графиков:

def graph_maker(listx1,listx2,listx3,list1,list2,list3):

#plot the saturation graph
por_plot = plt.plot(listx1,list1)
por_plot.ylabel('VOIP')
por_plot.xlabel('Porosity')
por_plot.show()

#plot the heigth graph
hth_plot = plt.plot(listx2,list2)
hth_plot.ylabel('VOIP')
hth_plot.xlabel('Height')
hth_plot.show()

#plot the saturation graph
sat_plot = plt.plot(listx3,list3)
sat_plot.ylabel('VOIP')
sat_plot.xlabel('Saturation')
sat_plot.show()

Поэтому я запустил код с двумя следующими строками:

list_maker(voip1,voip2,voip3,voip4,voip5,voip6,voip7,voip8,voip9,0.3,0.2,0.15,100,150,200,0.8,0.6,0.5)
graph_maker(list_maker)

И ошибка, которую я получаю:

graph_maker () отсутствует 5 обязательных позиционных аргументов: 'listx2', 'listx3', 'list1', 'list2' и 'list3'

Что я понимаю из этого, похоже, что list_maker () на самом деле возвращает только один список, и, очевидно, функции graph_maker нужно 6 аргументов.Есть идеи?

Спасибо за помощь!

Ответы [ 2 ]

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

Вам не хватает части внутреннего вызова функции во внешнем вызове функции:

graph_maker(list_maker)
graph_maker(*list_maker(vars))

Или назначьте свой начальный вызов функции переменной и используйте * для распаковки значений (кредит @zondo)

x=list_maker(voip1,voip2,voip3,voip4,voip5,voip6,voip7,voip8,voip9,0.3,0.2,0.15,100,150,200,0.8,0.6,0.5)
graph_maker(*x)
0 голосов
/ 11 октября 2018

Марко, когда вы передаете list_maker в graph_maker, вы на самом деле не передаете результат функции (нужные вам списки) в качестве входных данных в graph_maker, вы фактически передаете функцию в нее.

Но это , а не , это просто вопрос:

result = list_maker(voip1,voip2,voip3,voip4,voip5,voip6,voip7,voip8,voip9,0.3,0.2,0.15,100,150,200,0.8,0.6,0.5)
graph_maker(result)

Поскольку функция list_maker возвращает кортеж со всеми списками, вам нужно расширить их таким образом:

result = list_maker(voip1,voip2,voip3,voip4,voip5,voip6,voip7,voip8,voip9,0.3,0.2,0.15,100,150,200,0.8,0.6,0.5)
graph_maker(*result)

Звездочка расширит кортеж до 5 аргументов, необходимых для функции, имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...