2011-10-23 5 views
0

よりもむしろように名前空間から "*"のような関数群をインポートする方法はありますか?

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

を定義すると、私は

HEREは、グローバル空間(あるいは、ローカル関数環境)のいずれかである
trigfunctions = ('cos','arccos','sin','arcsin','tan','arctan') 
for method in trigfunctions: 
    setattr(HERE,method,getattr(numpy,method)) 

ような何かを行うことができますか?これにより、cosarccosに基づいて一般関数を定義しやすくなり、名前空間を指定しないで、目的のモジュールから適切な関数をロードすることができます(numpyが利用できない場合はmathなど)。私はこれが非常に一般的に適用されるとエラーにつながる可能性があることを認識していますが、いくつかの小さなインスタンスではそれが有用でしょう。

+1

質問がありますか?もしそうなら、それは何ですか? –

+0

それは '...私は$ CODEのように何かすることができますか?' – glglgl

答えて

5

同じ名前のimportingを意味する場合は、単にasをオフのままに:それを超えて

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

、あなたがsymbol table for the current moduleを取得するためにglobals()を使用することができます。

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

しかし、なぜ 'getattr(numpy、method)'ではなく 'numpy .__ dict __ [method]'ですか? – hatmatrix

+1

特に理由はありません。同じことをもう少し直接行う別の方法です。 Pythonドキュメントの[モジュールネームスペース](http://docs.python.org/tutorial/classes.html#id2)に関するコメントを考慮すると、getattrはおそらく2つの方が優れています。 – outis

関連する問題