2012-03-27 112 views
1

所以我在想,爲了在控制檯應用程序中實現這樣一個功能,在函數名的末尾添加一個問號將會傾吐出它的doc字符串,我可能會使用類似metaclasses的功能,其中定義/導入,我會複製所有的模塊成員名稱,併產生新的只是輸入文檔字符串。IPython如何?操作員實際工作?

然後我注意到你不需要實際的括號來調用助手函數,python實際上並不允許你在函數名的末尾加一個問號......所以這樣做是在蟒蛇或我只是浪費我的時間試圖弄清楚這一點?提前

回答

1

它沒有按照您想象的方式完成。 ipython會將您的命令提示符輸入作爲一行文本讀取,因此它有機會在它將它傳遞到eval(或其他)之前檢查它是否以問號結束。如果確實如此,它將運行help(name)而不是您輸入的內容。

AST看起來有點沉重,但您可以通過查看模塊code瞭解它的工作原理。它給了你一個輕量級的解釋器,如果你願意的話,你可以用這種語法來擴展。

+0

非常多 - 實際上它將它翻譯成'get_ipython()。magic(u'pinfo name')''。您可以使用'%hist -t'查看翻譯的命令。 – 2012-03-28 22:08:30

0

IPython中使用AST

謝謝,你可以自定義語法解析,並創建一個新的IPython叉。

可能會幫助

+0

它採用AST,但不是這 - ?!代碼有在創建一個AST之前是有效的Python語法,'name?'不是。 – 2012-03-28 22:09:30

+0

是的,你是真的 – pylover 2012-03-29 10:21:01

0

看一看在IPython.core.inputsplitter模塊,它分析的東西像,/,%原始輸入行的代碼等