生成器表达式和Google App Engine

时间:2012-06-02 01:48:41

标签: python google-app-engine iterator google-cloud-datastore generator

我正在尝试为Web应用程序(通过GAE)创建一个“迭代器”,它将“模板”字符串,两个整数(创建范围)和一个单词列表作为输入。用户将在字符串中插入一个“#”,他们希望迭代数字,并在字符串中用“@”表示他们希望迭代这些单词。

输入:

template string: "Person#Likes@"
starting integer: 1
ending integer: 3
list of words: "Apples, Bananas, Oranges"

输出:

Person1LikesApples
Person1LikesBananas
Person1LikesOranges
Person2LikesApples
Person2LikesBananas
Person2LikesOranges
Person3LikesApples
Person3LikesBananas
Person3LikesOranges

当用户点击标题为“next”或类似内容的提交按钮时,我希望输出显示在结果文本框中。踢球者是我希望输出只在第一次点击按钮时显示Person1的项目。然后,第二次单击它时,只显示Person2的项目,依此类推。

我用一个生成器编写了一个简单的小Python程序,但是我将它整合到我的Google App Engine应用程序中时遇到了麻烦。

以下是我的功能:

def g(f, text, lower, upper, list):
    for num in range(int(lower),int(upper)+1):
        yield f(text.replace('#', str(num)), list)

def f(text, list):
    for i in list:
        print text.replace('@', i)

和其他代码:

if text and lower and upper and words:  
    result = g(f, words, lower, upper, list)
    self.render_iterator(result=next(result))

(^当我填写其他值时,此代码在我的结果文本框中返回“None”,但在我稍微摆弄时将其识别为生成器表达式)

还有另一种方法可以解决这个问题吗?我应该使用GQL和Google数据存储区吗?如果您需要查看我的更多代码,请告诉我。

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议先了解如何在App Engine之外执行此操作。这是一个非常简单的编程问题,但如果你无法搞清楚,尝试在网络应用程序内部进行只是折磨。一旦您对解决方案感到满意,就可以将其应用到App Engine。

答案 1 :(得分:0)

f()没有返回值,因此返回None。你需要改变

print text.replace('@', i) 

return text.replace('@', i)
相关问题