愚かな質問ですが、これは私の偽りのためのdownvotesに関係なく私を悩ましています:メソッドが使用するメソッドの外でデータを生成するという無意味な恐怖を拾いました(変更なし)、これが当てはまるかどうかわかりません。メソッドの外でデータを生成するPythonicの方法
私はメソッドmyfx
を持っているとしましょう。それには長時間の操作が必要な辞書datadex
が必要ですが、そのセッション中のすべての呼び出しに共通するものがあります。最も簡単な方法は実行可能ではありません。
しかし、それはあまりにも多くの時間を無駄にします。だから、最高のものは、1つのクラス変数と同じように、一度メインスコープでそれを作るために次のようになります。
datadex={f:42 for f in foo} #initialise
def myfx(x):
mungeddata=datadex[x]+1 #munge
return mungeddata
しかし、私はなぜ知らないが、私はこれを回避するために偉大な長さに行きます。それは控えめですが、私はそうではないと思います。私は通常閉鎖に頼っています:
def initialise(foo):
datadex={f:42 for f in foo} #initialise
def myfx(x):
mungeddata=datadex[x]+1 #munge
return mungeddata
return myfx
悪いことにクラスを作る。 PythonとJSでほぼ独占的にコード化しています。私の最高の推測は、私のPerlのコード化日からの後退である - 無意識のうちに私は自分自身が変数を書くことを最初にすべてパスカルなので、いくつかの習慣が影として残っていると思うが、クラスやクロージャの方法についてはOO-全然違う。
「理由はわかりませんが、私はこれを避けるためにすばらしい長さに行きます。あなたは本質的に関数型プログラミングを考えているようですが、定義された変数は変更できません。 – Izkata
(a)あなたの質問は何ですか? (b)単純にdatadexを引数に渡して使用するとは考えていませんか? – jwodder
ええ、 'initialise'メソッドは基本的に部分関数アプリケーションを実行しています。 [functools](https://docs.python.org/3/library/functools.html)には、[partial](https://docs.python.org/3/library/functools)というヘルパーがあります。 html#functools.partial) – dtanders