【发布时间】:2012-03-23 09:17:51
【问题描述】:
我正在为一种旧的游戏内脚本语言编写解释器,因此需要编译字典,该字典具有与该函数的符号匹配的语言中的命令名称。
现在,我已经想通了:How to call a function based on list entry?
...您可以通过这种方式调用函数,而且我知道您可以使用 dir 获取模块中所有函数的字符串列表。我已经能够得到这个列表,并使用正则表达式,删除了内置命令以及我实际上不希望脚本能够调用的任何其他内容。目标是在这里沙箱。 :)
现在我有了模块中定义的项目列表,我需要获取每个定义的符号。
为了更直观的表示,这是我想要获取符号的测试模块:
def notify(stack,mufenv):
print stack[-1]
它是通过初始化脚本引入的,我可以使用以下方法在列表中获取通知函数的名称:
import mufprims
import re
moddefs=dir(mufprims)
primsfilter=re.compile('__.+__')
primslist=[ 'mufprims.' + x for x in dir(mufprims) if not primsfilter.match(x) ]
print primslist
这会返回:
['mufprims.notify']
...这是我希望为其查找符号的函数的确切名称。 我在这里阅读了http://docs.python.org/library/symtable.html,但我不确定我是否理解它。我认为这是我想要的关键,但我没有看到我能理解的例子。任何想法如何获得我从列表中提取的函数的符号?
【问题讨论】:
-
您是否查看过
inspect模块而不是正则表达式测试名称? docs.python.org/library/inspect.html#inspect.isroutine