Aşağıdaki örnek kullanılarak, xNiveMyNum() öğesinin myNum değerini kontrol etmek için 4 kez ve bir kez de geri dönmek için liste oluşturmak için 4 kez çağrılabileceğini görebiliriz. Büyük bir işlev olduğu ve değerinin değişmeyeceği için muhtemelen sadece 3 kez çağrılmasını istersiniz.Liste anlaşmasında birden çok çağrının engellenmesi
Liste Anlama Versiyon:
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]
Ben bunu düzeltmek için böyle bir şey yapabileceğini biliyorum:
ret=[]
for x in q:
k=x.giveMyNum()
if k>1:
ret.append(k)
ancak liste anlama ekstra aramayı önlemek için bir yol var?
Ara değerini tutmak zorunda değilim.
İşlevsel kodu severim. Bu çok okunabilir. – Carbon
@ProbablyAStupidQuestion, daha sonra filtre (lambda n: n> 1, harita (test.giveMyNum, q))) ';) –
gerçekten hoşunuza gidebilir! Ben üzgün filtre Python3 itertools içine taşınmaktadır. – Carbon