范围,使用当前模块中的功能

Bre*_*dan 1 python scope module structure function

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

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

其中有300个,我有一个这样的结构列表来创建一个字典,所以形式查找[key] =值(奖金问题;任何更有效或明智的方式来做这个比一个大规模的字典?).

我想将所有这些保留在同一个模块中,但是在文件末尾有函数(字典初始化等),所以我不必向下滚动300行来查看代码,即如下所示.以下示例.

当我按下面运行它时,我收到错误'initlookups is not defined'.当我的结构是初始化时,那么函数定义,然后函数使用,没问题.

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

在模块结构方面我应该做些什么?有没有比使用dict存储此查找表更好的方法(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
Run Code Online (Sandbox Code Playgroud)

Ste*_*202 5

在调用函数之前,需要定义函数.如果您想要在文件顶部执行需要执行的代码,只需定义一个main函数并从底部调用它:

import sys

def main(args):
    pass

# All your other function definitions here

if __name__ == '__main__':
    exit(main(sys.argv[1:]))
Run Code Online (Sandbox Code Playgroud)

这样,无论你引用什么都main将被解析,因此已经知道.测试的原因__name__是,这种main方法只会在脚本直接执行时运行,而不是在由另一个文件导入时运行.


旁注:dict带300键的a 并不是很大,但你可能想要将填充的代码移动dict到一个单独的模块,或者(或许更花哨)以JSON格式存储键/值对并加载它程序启动时