1

Pythonでは、新しい関数をプログラムで簡単に作成できます。これを現在のスコープでプログラムで決定された名前にどのように割り当てるのですか?

これは私がやりたいことです(動作しないコードで):

obj_types = ('cat', 'dog', 'donkey', 'camel')
for obj_type in obj_types:
    'create_'+obj_type = lambda id: id

上記の例では、決定される関数名への の代入はlambda明らかに機能しません。実際のコードでは、関数自体は関数ファクトリによって作成されます。

バックグラウンドは怠惰であり、繰り返さないことです。私は、生成された関数を割り当てるオブジェクト タイプを 12 以上持っています。したがって、コードは現在次のようになります。

create_cat   = make_creator('cat')
# ...
create_camel = make_creator('camel')

関数create_catなどは、パーサーでハードコーディングされて使用されます。

ドキュメントtypes.new_class()に見られるように、プログラムでクラスを新しいタイプとして作成すると、解決策のようです。このアプローチを(誤って)使用するのが私の最善の策ですか?

4

2 に答える 2

3

あなたがやろうとしていることを達成する1つの方法(ただし、動的な名前で関数を作成しない)はdict、名前をキーとして使用してラムダをに保存することです。を呼び出す代わりに、 を呼び出しcreate_cat()ますcreate['cat']()。これは、パーサー ロジックでも名前をハードコーディングしないこととうまく一致します。

于 2013-04-24T13:52:15.257 に答える