2016-04-29 33 views
2

我nedd一个python生成器来获取PDF文件中的行的高度。 为了得到这个,我创建了一个生成器,它返回下一行的高度。蟒蛇发生器与不同next()条件

def height_generator(height): 
    while height > 0: 
     height -= 15 
     yield(height) 

这工作完美到目前为止。

但我需要不同的身高。例如,如果在我的文件中需要一个新的段落,我需要将高度减少20而不是15.

要得到这个,我想定义,如果我想要一个新行或一个新的段落,我的发电机。

我TREID是这样的:

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) 

,但它不工作。

回答

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

+0

这正是我想要的! 谢谢:)。 – Krasnars

0

为什么不这样做?:

def height_generator(height): 
    while height > 0: 
     a= yield height 
     if a == 'nl': 
      height -= 15 
     elif a == 'np': 
      height -= 20