0

アイデアは、新しい関数が作成されると、その変数名が自動的にリストに追加されるというものです。

注意してください、私は mylist.append(何でも) を使用できることを認識していますが、手動ではなく自動的に追加する方法を具体的に探しています。

では、まずは...

def function1(*args):
    print "string"

def function2(*args):
    print "string 2"

mylist = []

... 'function1' と 'function2' を mylist に自動的に追加して、このようにする方法はありますか...

mylist = [function1, function2]

具体的には、文字列ではなく、変数名をリストしたいと思います (例: "function1")。

私はPythonを学んでいて、実験しているだけなので、現時点では特定の目的には役立たず、可能かどうか知りたいだけです.

提案をお寄せいただきありがとうございます。不明な点がありましたら、ご質問に喜んでお答えください。

**

4

2 に答える 2

1

関数オブジェクトをリストに追加するだけです:

mylist = [function1, function2]

または使用.append()

mylist.append(function1)
mylist.append(function2)

Python 関数は第一級のオブジェクトです。それらは、クラスや文字列、整数と同じように値です。

モジュール全体でこれを自動化したい場合は、関数を使用して、これまでにモジュールで定義されたすべてのglobals()関数をすばやく一覧表示できます。 inspect.isfunction()predicateの助けを借りて、次のようにします。

import inspect
mylist = [v for v globals().itervalues() if inspect.isfunction(v) and v.__module__ == __name__]

このv.__module__ == __name__テストにより、インポートしたものではなく、現在のモジュールの関数のみをリストすることが保証されます。

ただし、明示的は暗黙的よりも優れています。mylist.append(functionname)各関数の下に追加するか、デコレータを使用します。

mylist = []
def listed(func):
    mylist.append(func)
    return func

@listed
def function1():
    pass

@listed
def function2():
    pass

@listedデコレータで「マーク」した各関数がmylistリストに追加されます。

于 2013-05-11T17:26:13.580 に答える