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

2024-06-25 06:57:48 发布

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

我有一个这样的文件:

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

我做这个函数是为了使字典和每个字典中的split元素只能到达管道(“|”)后面的元素,称为geneId

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

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

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

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

因为我调用的是readGroupFile中的一个元素,它不是在这个函数之外定义的。 那么,我怎样才能访问readGroupFile函数中的所有“geneId”来在getPost(…)中添加这个参数,这样它就可以对我的组文件中的每个geneId工作


Tags: 文件函数in元素dictsplittaxonomygene
1条回答
网友
1楼 · 发布于 2024-06-25 06:57:48

您的问题是,您只创建局部变量,而这些变量在函数结束时会被删除。
所以你有两个选择:
第一个是将geneid定义为一个全局变量,您所要做的只是:

     global geneid
     def readGroupfile():
     global geneid

你必须定义他一次,而不是在一个函数中,然后每当你使用它的时候,只要写上global和他的名字,这将使他成为全局变量。 您的secend选项是对dict执行相同的操作,dict也包含此变量。 我希望我帮了你

相关问题 更多 >