2013-05-17 55 views
4

我正在使用SQLAlchemy,並試圖將函數group_by導入解釋器,但我似乎無法找到它。有沒有簡單的方法來搜索模塊樹來查看這個函數的位置?如何在Python模塊樹中查找函數?

當然,我試過from sqlalchemy import + tab並手動搜索,但是在每個樹級都有太多選項需要檢查。

回答

3

做到這一點的簡單方法是走出解釋器,只是search the docs


同時,它看起來對我來說,有無此功能導入。有group_by方法sqlalchemy.orm.query.Querysqlalchemy.sql.expression.[Compound]Select[Base]對象。


但是,如果你真的想遞歸遍歷所有的包找了名的模塊走,這裏是你會怎麼做:

import inspect 

def find_name(package, name): 
    if hasattr(package, name): 
     yield package 
    for modulename, submodule in inspect.getmembers(package, inspect.ismodule): 
     yield from find_name(submodule, name) 

對於Python 3.2或更早的版本,你需要用循環替換yield from

for modulename, submodule in inspect.getmembers(package, inspect.ismodule): 
    for result in find_name(submodule, name): 
     yield result 

如果你只是想,而不是所有的結果的第一個結果,你可以只是return代替yield ing:

def find_name(package, name): 
    if hasattr(package, name): 
     return package 
    for modulename, submodule in inspect.getmembers(package, inspect.ismodule): 
     result = find_name(submodule, name) 
     if result: 
      return result 
+0

呵呵。我可以發誓,我試圖用它作爲一種方法的陳述,它說沒有這樣的功能。這很好理解,但我仍然想回答模塊搜索問題。 – jclancy

+0

是否有可能嘗試在錯誤類型的對象上使用它? – abarnert

0

嘗試打印SQLAlchemy.__all__這將返回該模塊中公開可用的所有功能的列表。

+0

沒錯,這與'from sqlalchemy import + tab'幾乎完全一樣,只是沒有子模塊。 – jclancy

+0

有一個具有相同類型主題的線程[http://stackoverflow.com/questions/139180/listing-all-functions-in-a-python-module] – abhishekgarg