如何在 Genshi 中创建/调用 python 生成器?这甚至可能吗?
例如,(不,我不是在寻找这个问题的替代解决方案,其中有很多,包括枚举 for each 等):
<?python
""" a bunch of other code ... """
def bg_color_gen():
""" Alternate background color every call """
while 1:
yield "#FFFFFF"
yield "#EBEBEB"
?>
然后调用这个函数:
<fo:block background-color="${bg_color_gen()}">First entry</fo:block>
<fo:block background-color="${bg_color_gen()}">Second entry</fo:block>
<fo:block background-color="${bg_color_gen()}">Third entry</fo:block>
这与我的 <fo:block> 无关,可以用 <div> 代替。这不是 FO 问题,而是 Genshi 问题。我猜 Genshi 不承认'yield'并且无限地运行'while 1'?
另外,我确实意识到我可以使用全局来跟踪计数器,然后调用
counter++
if counter%yieldCount==0: return "#FFFFFFF"
elif counter%yieldCount==1: return "#EBEBEB"
但这不是生成器,并且很快就会变得丑陋!
澄清:问这个问题的另一种方式:你将如何编码
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.