Python3如何在另一个函数中使用函数中的元素

时间:2015-06-15 10:24:15

标签: python function dictionary request

我有一个看起来像这样的文件:

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

我做了这个函数,使每个字典中的字典和拆分元素只能到达管道后面的元素(" |"),称为geneId。

然后我做了一个函数,用这些geneID在互联网数据库上创建一个Post Request。我不会链接整个函数,因为当我在函数行中手动添加geneId时它可以正常工作:

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

考虑到" 391222558"是一个来自组文件的geneId,但我需要用每个" geneId"来替换这些数字。在我的readGroupFile函数中。 我不能写:

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

因为我调用了readGroupFile中的一个元素,该元素未在此函数之外定义。 那么我怎样才能达到所有" geneId"在我的readGroupFile函数中,在getPost(...)中添加此参数,以便它可以用于我的组文件中的每个geneId吗?

1 个答案:

答案 0 :(得分:0)

你的问题是你只创建局部变量,并在函数结束时删除它们。
所以你有几个选择:
第一个是将geneid定义为全局变量,你所要做的只是:

     global geneid
     def readGroupfile():
     global geneid

你必须定义他一次不在函数中,然后每当你使用它时只写全局和他的名字,它将使他成为全局变量。 你的secend选项是对你的dict做同样的事情,它也包含这个变量。 我希望我帮助过你。