Anhand der folgenden als Beispiel können wir sehen, x.giveMyNum() wird 4 mal aufgerufen - 3 mal, um den Wert von myNum zu überprüfen und einmal, um die Liste zu erstellen, zurückzukehren. Sie möchten wahrscheinlich, dass es nur 3 Mal aufgerufen wird, da es sich um eine reine Funktion handelt, deren Wert sich nicht ändert.Verhindern mehrerer Aufrufe im Listenverständnis
Listenkomprehension Version:
class test(object):
def __init__(self,myNum):
self.myNum=myNum
def giveMyNum(self):
print "giving"
return self.myNum
q=[test(x) for x in range(3)]
print [x.giveMyNum() for x in q if x.giveMyNum()>1]
Ich weiß, dass Sie etwas tun können, es zu beheben:
ret=[]
for x in q:
k=x.giveMyNum()
if k>1:
ret.append(k)
aber ist es eine Möglichkeit, den zusätzlichen Anruf in einer Liste Verständnis zu verhindern?
Ich brauche nicht den Zwischenwert zu halten.
Ich mag Funktionscode. Das ist sehr gut lesbar. – Carbon
@ProbablyAStupidQuestion, dann magst du 'filter (lambda n: n> 1, Karte (test.giveMyNum, q)))') –
das ist wirklich nett! Ich bin traurig, Filter wird in Itertools in Python3 verschoben. – Carbon