gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:37:04 24 4
gpt4 key购买 nike

我需要一个 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

关于具有不同 next() 条件的 python 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com