事前にオブジェクトの名前がわからない場合は、モジュールの先頭で関数を使用する最も良い方法は何か:ユーザの入力であり、したがってその名前は変数に格納されます。名前が変数に格納されている場合、Pythonのモジュールレベルの関数にアクセスする
一つの解決策は、eval()を使用たとえば、ScipyCookbook/SignalSmooth: smooth()に(またStackOverflow: Python Smooth Time Series Dataに対する回答で参照)
import numpy
window = 'hanning'
w = eval('numpy.'+window+'(11)')
は
w = numpy.hanning(11)
に相当するであろうが、より優れ方法があります壊れやすい/潜在的に危険なeval
?例えば
、好ましいことvars()
w = vars(numpy)[window](11)
を使用していないでしょうか?任意のより良い/もっとpythonicアイデア?
私はevalやgetattrのような他のアプローチよりもずっと優れています。これも私の個人的な方法です。 +1。私が本当に好きなのは、ハンドラをいつでも交換できることです。 – jdi
私はここでgetattrがより良い選択肢だと主張します - 繰り返しは必要ありません。ハンドラを変更する必要がある場合は、罰金ですが、それ以外は不要です。 –
@Lattyware: 'numpy'モジュールには、約500の呼び出し可能オブジェクトが含まれています。それらのうちの5つだけが窓関数として有用である。 'getattr()'を使うと、500個の関数をすべて使えるようになり、そのほとんどはあなたのプログラムで少なくとも奇妙な動作につながります。さらに、私はこれを「自分自身を繰り返す」とは考えていません。私はNumPyのAPIから私たちのプログラムのユーザーインターフェイスを切り離すことを検討したいと思います。プログラム内にあるこれらのウィンドウ関数がNumPyの*関数オブジェクト*にある*名前*をマップします。繰り返しはありません。 –