2011-10-23 49 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

相关问题