2015-06-15 2 views
0

У меня есть файл, который выглядит следующим образом:Python3 Как я использовать элемент из функции в другой функции

OG_100000: V_bacterium_v|198260291 O_bacterium_v|391222558 O_terrae_v|182414991 

и я сделал эту функцию:

def readGroupFile(groupFileName): 
dict_gene_taxonomy = {} 
fh = open(groupFileName,"r") 

for line in fh: 
    liste = line.split(": ") 
    groupName = liste[0] 
    genesAsString = liste[1] 
    dict_taxon = {} 
    liste_gene = genesAsString.split() 

    for item in liste_gene: 
     taxonomy_gene = item.split("|") 
     taxonomy = taxonomy_gene[0] 
     geneId = taxonomy_gene[1]       

     if taxonomy in dict_taxon: 
      listeCorrespondantATaxonomy = dict_taxon[taxonomy] 
      listeCorrespondantATaxonomy.append(geneId) 
     else: 
      dict_taxon[taxonomy] = [] 
      dict_taxon[taxonomy].append(geneId) 

    dict_gene_taxonomy[groupName] = dict_taxon 
fh.close() 
return dict_gene_taxonomy 

Я сделал эту функцию сделать словари и разделенный элемент в каждом словаре, чтобы иметь возможность достигать только элемента после трубы («|»), называемого genId.

Затем я создал функцию для создания почтового запроса в базе данных Интернета с этим генотипом. Я не собираюсь ссылку вся функция, потому что она работает должным образом, когда я вручную добавить geneId в строке функция в:

data = urllib.parse.urlencode(getPost("391222558")) 

, учитывая тот факт, что «391222558» является одним geneId из группы файлов, но мне нужно заменить эти числа каждым «genId» в моей функции readGroupFile. я не могу написать:

data = urllib.parse.urlencode(getPost(geneId)) 

, потому что я звоню элемент в readGroupFile, который не определен вне этой функции. Итак, как я могу достичь всего «geneId» в моей функции readGroupFile, чтобы добавить этот параметр в getPost (...), чтобы он мог работать для каждого genId в моем групповом файле?

ответ

0

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

 global geneid 
    def readGroupfile(): 
    global geneid 

вы должны определить его когда-то не в а затем всякий раз, когда вы используете его, просто напишите глобальное имя и его имя, и это сделает его глобальной переменной. ваши параметры secend должны сделать то же самое с вашим dict, который также содержит эту переменную. Надеюсь, я помог вам.

+0

Спасибо за ваш ответ, я попробую это и посмотрю, работает ли оно. –

+0

я сделал то, что вы предложили, и я получаю: глобальный geneId = taxonomy_gene [1] \t \t \t \t \t \t \t ^ SyntaxError: недопустимый синтаксис, то^точка на = –

+0

и нужно написать только один раз в начало функции и каждый раз, когда вы используете ее, просто напишите genid с глобальным, но наверху вам нужно написать глобальную генерацию: code: global geneid def readGroupfile(): global geneid geneid = somthing некоторые, как он не устанавливает t он код как код, так что представьте, что каждое определение отличается от линии –