2011-10-23 79 views
0

而不是等定義有沒有辦法從命名空間「as」中導入一組函數(不帶*)?

from numpy import cos as cos 
from numpy import arccos as arccos 

,而且我可以這樣做

trigfunctions = ('cos','arccos','sin','arcsin','tan','arctan') 
for method in trigfunctions: 
    setattr(HERE,method,getattr(numpy,method)) 

哪裏HERE要麼是全球空間(或可能,局部功能的環境)?這樣可以更容易地定義基於cosarccos的通用函數,而無需指定名稱空間,並從所需模塊加載適當的函數(例如,如果numpy不可用,則爲math)。我意識到,這可能會導致錯誤應用非常普遍,但在一些小的情況下,它會很有用。

+1

你有問題要問?如果是這樣,那是什麼? –

+0

這是'...我可以做一些像$代碼,其中...'。 – glglgl

回答

5

如果你的意思是importing具有相同的名稱,只需將關閉as

from numpy import cos, arccos, sin, arcsin, tan, arctan 

除此之外,您可以使用globals()得到symbol table for the current module

me=globals(); 
trigfunctions = ('cos','arccos','sin','arcsin','tan','arctan') 
for method in trigfunctions: 
    me[method] = numpy.__dict__[method] 

您還可以使用sys.modules[__name__]引用當前模塊。

+0

哎呀,那很簡單。但'globals()'技巧非常棒! – hatmatrix

+0

但爲什麼'numpy .__ dict __ [method]'而不是'getattr(numpy,method)'? – hatmatrix

+1

沒有特別的理由;這只是另一種直接做同樣事情的方式。考慮到Python文檔中關於[module namespaces]的註釋(http://docs.python.org/tutorial/classes.html#id2),'getattr'可能是兩者中較好的。 – outis

相關問題