我使用了一个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)
但它不起作用。
答案 0 :(得分:4)
您正在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
答案 1 :(得分:0)
为什么不做这样的事情?:
def height_generator(height):
while height > 0:
a= yield height
if a == 'nl':
height -= 15
elif a == 'np':
height -= 20