[英]python generator with different next() conditions
我使用python生成器在pdf文件中獲取行的高度。 為此,我創建了一個生成器,該生成器返回下一行的高度。
def height_generator(height):
while height > 0:
height -= 15
yield(height)
到目前為止,這很完美。
但是我需要不同的身高。 例如,如果需要在文件中添加新段落,則需要將高度減少20而不是15。
為此,我想在調用生成器時定義是否需要換行或新的段落。
我整理這樣的東西:
def height_generator(height):
while height > 0:
def spacer(height, a):
if a == 1:
height -= 15
yield(height)
elif a ==2:
height -= 20
yield(height)
但它不起作用。
您在while
循環中定義一個函數,這只會使您的代碼無限循環。
您需要send(a)
給生成器以告訴它該怎么做。 例如
def height_generator(height):
while height > 0:
a = yield height
if a == 1:
height -= 15
else:
height -= 20
g = height_generator(100)
g.next()
print g.send(1) # 85
print g.send(2) # 65
print g.send(1) # 50
yield
不僅是生成器為其調用者生成值的一種方式,而且還可以用於將值發送到生成器。 傳遞給send
的參數將是表達式yield height
的值。 有關更多詳細信息,請閱讀PEP 255
為什么不這樣做呢?:
def height_generator(height):
while height > 0:
a= yield height
if a == 'nl':
height -= 15
elif a == 'np':
height -= 20
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.