2016-01-26 32 views
1

我在Python中编写了一个简单的命令行工具。为了简化的逻辑,我使用dict用于存储指令和处理程序,是这样的:Python:引用稍后将声明的函数的优雅方式

#!/usr/bin/env python 

# some code here 

DISPACHERS = { 
    "run": func_run 
    "list": func_list 
} 

# other code 

的问题是,我必须把这段代码的函数声明之后,这是不标准的做法我在其他语言中看到过(即一个块中的常量,之后的变量,然后是函数)。

我可以使用字符串来存储函数,并使用类似getattr(__main__, "func_run")的东西来检索它,所以我可以坚持我的偏好,但我不知道这是否是一个“正确”的方式。

有什么想法?

===更新===

因为它是一个简单的Python脚本来处理其他项目的一些自动化的任务,所以它会更好,如果能够保持在一个单一的文件(没有其他模块)。

+0

你可以把它们放在不同的模块中,然后将它们导入到脚本的顶部?为什么它不能在目前的状态下处于顶峰呢? – Holloway

+0

@霍洛威我不这么认为,因为它仍然错过了函数声明。相同的原因,我不能把它放在顶部,因为实际的处理函数是在它之后声明的,否则我会产生这样的错误:'NameError:name'func_run'未定义' – Lin

+0

把它放在函数声明之后,不要造成问题。 – furas

回答

2

使用装饰器来枚举函数。

dispatchmap = {} 

def dispatcher(name): 
    def add_dispatcher(func): 
    dispatchmap[name] = func 
    return func 
    return add_dispatcher 

... 

@dispatcher('run') 
def func_run(...): 
    ... 
+0

谢谢,以前从来没有想过使用装饰器。非常有建设性。 – Lin