web-dev-qa-db-ja.com

リスト内包表記を使用して関数のリストを呼び出す

関数のリストを呼び出してリスト内包表記を使用できますか?

def func1():return 1
def func2():return 2
def func3():return 3

fl = [func1,func2,func3]

fl[0]()
fl[1]()
fl[2]()

できるとわかっている

for f in fl:
   f()

しかし、私は以下を行うことができますか?

[f() for f in fl]

関数の私のリストがクラスにある場合、それらの親切な人々のための追加の質問、例えば

class F:

    def __init__(self):
        self.a, self.b, self.c = 0,0,0

    def func1(self):
        self.a += 1

    def func2(self):
        self.b += 1

    def func3(self):
        self.c += 1

    fl = [func1,func2,func3]

fobj= F()

for f in fobj.fl:
    f()

それは機能しますか?

28
Jerry Gao

もちろん、FábioDinizが言ったように:)、ただし、クラスメソッドを呼び出し可能として使用する場合は、オブジェクトを引数として指定する必要があります。

_fobj= F()

for f in fobj.fl:
    f(fobj)
_

メソッドdef funcX(self):の定義を見ると、メソッドは1つの引数 "self"を必要とするため、オブジェクトはcallableの引数として指定する必要があります

15
P2bM
>>> [f() for f in fl]
[1, 2, 3]

絶対に:)

21
Mike Lewis

はい、できます。結果のリストには、関数の戻り値が保持されます。

1
nmichaels

はい、できます-関数は意図したとおりに呼び出されます。

0