直接屬性訪問和使用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