Neden hayır önce(iterable) yerleşik işlevi Python?
Merak ediyorum eğer bir nedeni var yok first(iterable)
Python built-in fonksiyonları, biraz benzer any(iterable)
all(iterable)
(olabilir sıkışmış bir stdlib modülü bir yerde, ama anlamıyorum itertools
). first
gereksiz (ve potansiyel olarak sonsuz sayıda) işlem önlenebilir böylece kısa devre jeneratör bir değerlendirme gerçekleştirmek istiyorsunuz; yani
def identity(item):
return item
def first(iterable, predicate=identity):
for item in iterable:
if predicate(item):
return item
raise ValueError('No satisfactory value found')
Böyle şeyler gibi ifade edebilirsiniz:
denominators = (2, 3, 4, 5)
lcd = first(i for i in itertools.count(1)
if all(i % denominators == 0 for denominator in denominators))
Açıkça jeneratör sonlandırmak olmadığından bu durumda list(generator)[0]
yapamaz.
Ya eğer karşı maç için yukarıdaki diyagram bir grup varsa, bu yararlı hepsi groupdict
aynı arayüze sahip olduğunda):
match = first(regex.match(big_text) for regex in regexes)
list(generator)[0]
kaçınarak gereksiz işleme tasarrufu ve olumlu bir maç kısa devre yapıyor.
CEVAP
Eğer bir iterable varsa, sadece next
kendi yöntemini çağırabilirsiniz. Gibi bir şey
In [3]: (5*x for x in xrange(2,4)).next()
Out[3]: 10
Hayır çok Satırlı Lambda Python: Neden...
Python, neden bir işlevi arayan, ama d...
Python yerleşik bir kimlik işlevi var ...
Neden Standart girdiden okuma satır Py...
Python katılın, neden dize.liste yerin...