簡體   English   中英

具有不同next()條件的python生成器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM