Skip to main content
 首页 » 编程设计

python之作用域,使用当前模块中的函数

2025年05月04日20开发

我知道这一定是一个微不足道的问题,但我尝试了很多不同的方法,并稍微搜索了一下解决方案,但我如何在当前模块中创建和引用子函数?

例如,我正在编写一个程序来解析一个文本文件,并且我想为其中的 300 个不同名称中的每一个分配一个类别。

其中有 300 个,我有一个结构化的列表来创建字典,所以形式为 lookup[key]=value(奖金问题;有比大量字典更有效或更明智的方法吗? ).

我想把所有这些都放在同一个模块中,但是函数(字典初始化等)在 文件末尾,因此我不必向下滚动 300 行即可查看代码,即如下例所示。

当我按如下方式运行时,出现错误“initlookups is not defined”。当我的结构是这样时,它是初始化,然后是函数定义,然后是函数使用,没问题。

我确信一定有一种显而易见的方法可以在不保持代码内联的情况下初始化函数和关联的字典,但到目前为止已经尝试了很多但没有成功。我可以将它放在一个外部模块中并导入它,但为了简单起见我不想这样做。

在模块结构方面我应该做什么?有没有比使用字典存储此查找表更好的方法(它有 300 个唯一的文本键映射到大约 10 个类别?

谢谢,

布兰登


import ..... (initialisation code,etc ) 
 
initLookups()          # **Should create the dict - How should this be referenced?** 
print getlookup(KEY)   # **How should this be referenced?** 
 
 
def initLookups(): 
    global lookup 
    lookup={} 
    lookup["A"]="AA" 
    lookup["B"]="BB" 
    (etc etc etc....) 
 
 
def getlookup(value) 
    if name in lookup.keys(): 
        getlookup=lookup[name] 
    else: 
        getlookup="" 
 
    return getlookup 

请您参考如下方法:

一个函数在被调用之前需要被定义。如果想让需要执行的代码放在文件的顶部,定义一个main函数,然后从底部调用即可:

import sys 
 
def main(args): 
    pass 
 
# All your other function definitions here 
 
if __name__ == '__main__': 
    exit(main(sys.argv[1:])) 

这样,无论您在 main 中引用什么,都将被解析并因此已知。测试原因__name__就是这样main方法只会在直接执行脚本时运行,不会被其他文件导入。


旁注:具有 300 个键的 dict 绝不是庞大的,但您可能希望将填充 dict 的代码移动到单独的模块中,或者(也许更花哨)以类似 JSON 的格式存储键/值对并在程序启动时加载它。