直接属性访问和使用getattr()之间的区别应该可以忽略不计。您可以使用Python的dis
模块的两种方法比较告诉两个版本字节码的区别:
>>> import dis
>>> dis.dis(lambda x: x.foo)
1 0 LOAD_FAST 0 (x)
3 LOAD_ATTR 0 (foo)
6 RETURN_VALUE
>>> dis.dis(lambda x: getattr(x, 'foo'))
1 0 LOAD_GLOBAL 0 (getattr)
3 LOAD_FAST 0 (x)
6 LOAD_CONST 0 ('foo')
9 CALL_FUNCTION 2
12 RETURN_VALUE
它,然而,听起来就像你正在开发一个壳,这是非常相似的如何Python库cmd
执行命令行shell。 cmd
,您可以创建一个命令名匹配,像这样一个cmd.Cmd
对象上定义的函数执行命令弹:
import cmd
class EchoCmd(cmd.Cmd):
"""Simple command processor example."""
def do_echo(self, line):
print line
def do_EOF(self, line):
return True
if __name__ == '__main__':
EchoCmd().cmdloop()
您可以在任何文档阅读更多有关模块,或在http://www.doughellmann.com/PyMOTW/cmd/index.html
来源
2010-05-26 02:07:55
146
如果你还没有看过pyparsing http://pyparsing.wikispaces.com/你真的应该,有__NO__真正的理由编写你自己的解析器在python中的任何东西。 – 2010-05-26 02:11:49
模糊,我很确定我能想到一个,这就是我为了学习目的而做的。在开始这个当前的项目之前,我不明白函数是第一类对象的含义。尽管如此,我很欣赏这个参考。我会研究它。 – Wilduck 2010-05-27 04:20:52