Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Genshi和Python生成器(产量)_Python_Generator_Genshi - Fatal编程技术网

Genshi和Python生成器(产量)

Genshi和Python生成器(产量),python,generator,genshi,Python,Generator,Genshi,如何在Genshi中创建/调用python生成器?这可能吗 例如,(不,我不是在寻找这个问题的替代解决方案,其中有很多,包括在For each上枚举,等等): 但这不是发电机,很快就会变丑 澄清: 问这个问题的另一种方式是:如何编写代码 def fib(): a,b = 0,1 while True: yield a b = a+b yield b a = a+b 然后在句子“第一个数字是$fib(),第二个是$f

如何在Genshi中创建/调用python生成器?这可能吗

例如,(不,我不是在寻找这个问题的替代解决方案,其中有很多,包括在For each上枚举,等等):

但这不是发电机,很快就会变丑

澄清: 问这个问题的另一种方式是:如何编写代码

def fib():
    a,b = 0,1
    while True:
        yield a
        b = a+b
        yield b
        a = a+b
然后在句子“第一个数字是$fib(),第二个是$fib(),第三个是$fib(),依此类推”中调用

================================================

根据已接受的答案更新了完整解决方案:

<?python
def fib_generator():
    a,b = 0,1
    while True:
        yield a
        b = a+b
        yield b
        a = a+b
fib = fib_generator()
?>


The first number is ${next(fib)}, 
the second is ${next(fib)},
the third is ${next(fib)}, and so on.

第一个数字是${next(fib)},
第二个是${next(fib)},
第三个是${next(fib)},依此类推。

在不了解内容结构的情况下,我建议如下:

<fo:block py:for="i, entry in entries"
          background-color="${'#FFFFFF' if i % 2 else '#EBEBEB'}">
  ${entry}
</fo:block>

您需要首先声明生成器,然后对其调用
next
,以获得
yield
ed颜色

在本例中,您将传递通过调用
bg\u color\u gen()
ie)创建的生成器的三个不同实例

#这将创建一个生成器
>>>bg_color_gen()
>>>bgcg=bg_color_gen()
#这会得到值
>>>下一个(bgcg)
"FFFFFF"
>>>下一个(bgcg)
“#EBEBEB”
>>>下一个(bgcg)
"FFFFFF"
>>> 

用什么来代替“第一”、“第二”和“第三”项?这是动态的还是你将要使用的文本类型?这对这个问题不重要。但它可以完全像这样,或者在一个for循环中打印一组行,其中一些行有自己的背景色,我们不想中断/重置交替颜色。基本上,这里唯一的问题是如何获得发电机。。。${fibonnaci()}${fibonnaci()}${fibonnaci()}例如,谢谢你的解释,它告诉我哪里错了。我接受了另一个答案,因为它告诉我怎么做,但你的回答解释了为什么(这对我来说同样重要),这很简单@Pierre Francoys Brousseau不是问题。您的第一个响应不起作用的原因是我已经在for循环中,有些条目无法显示,而其他条目则无法显示。然而,你的第二个解决方案简洁地回答了我的问题!好的,NP,我愿意被说服,但我建议,除了
py:if
py:strip
之外,使用我的第一个建议组合循环几乎总是可能的。如果您充分利用Genshi的所有功能,它可能会非常强大:)
def fib():
    a,b = 0,1
    while True:
        yield a
        b = a+b
        yield b
        a = a+b
<?python
def fib_generator():
    a,b = 0,1
    while True:
        yield a
        b = a+b
        yield b
        a = a+b
fib = fib_generator()
?>


The first number is ${next(fib)}, 
the second is ${next(fib)},
the third is ${next(fib)}, and so on.
<fo:block py:for="i, entry in entries"
          background-color="${'#FFFFFF' if i % 2 else '#EBEBEB'}">
  ${entry}
</fo:block>
<py:with vars="color=bg_color_gen();">
  <fo:block background-color="${next(color)}">
</py:with>
# this creates a generator
>>> bg_color_gen()
<generator object bg_color_gen at 0x02B21A30>
>>> bgcg = bg_color_gen()
# this gets values
>>> next(bgcg)
'#FFFFFF'
>>> next(bgcg)
'#EBEBEB'
>>> next(bgcg)
'#FFFFFF'
>>>