Arasındaki fark Python'In Jeneratörler ve Kullanımına
Kullanımına ve jeneratörler arasındaki fark nedir? Her durumda kullandığınız için bazı örnekler yararlı olacaktır.
CEVAP
Daha genel bir kavramdır iterator
: next
yöntem (__next__
Python 3) ve return self
yok __iter__
bir yöntem olan herhangi bir nesne.
Her jeneratör bir yineleyici, ama tersi değil. Bir jeneratör inşa çağırarak bir fonksiyonu olan bir ya da daha fazla yield
deyimler (yield
tablolar, Python 2.5 ve daha önceki) ve bir nesne karşılayan bir önceki paragrafta tanımı iterator
.
İsteyebilirsiniz kullanın özel bir yineleyici, yerine bir jeneratör, ihtiyacın olduğunda bir sınıf ile biraz karmaşık devlet-idare davranış, ya da maruz istediğiniz diğer yöntemlerin yanında next
(__iter__
__init__
). Çoğu zaman, bir jeneratör (bazen, yeterince basit ihtiyaçlarını, jeneratörifade) yeterli ve basit devlet bakım (makul sınırlar içinde) temelde "sizin için" kare uzaklaştırmayı ve devam etti. yapıldığından kodu.
Örneğin, bir jeneratör gibi
def squares(start, stop):
for i in xrange(start, stop):
yield i * i
generator = squares(a, b)
veya eşdeğer jeneratör ifadesi (genexp)
generator = (i*i for i in xrange(a, b))
özel bir yineleyici olarak inşa etmek için daha fazla kod alır:
class Squares(object):
def __init__(self, start, stop):
self.start = start
self.stop = stop
def __iter__(self): return self
def next(self):
if self.start >= self.stop:
raise StopIteration
current = self.start * self.start
self.start = 1
return current
iterator = Squares(a, b)
Ama, tabii ki, kolayca ekstra yöntemler sunabilir Squares
sınıf ile, yani
def current(self):
return self.start
uygulamanızda bu tür ek işlevsellik için gerçek bir ihtiyaç varsa.
@Staticmethod ve @Python classmethod a...
Eski stil ve yeni stil Python sınıflar...
Python 2'de range ve xrange fonksiyonl...
Python soyut sınıf ve arayüz arasındak...
'eval arasındaki fark ne, exec, v...