python - 使用 Python Bottle 生成物品不起作用
问题描述
使用时:
from bottle import route, run, request, view
N = 0
def yielditem():
global N
for i in range(100):
N = i
yield i
@route('/')
@view('index.html')
def index():
print yielditem()
print N
run(host='localhost', port=80, debug=False)
页面index.html
显示成功,但yield
部分不工作:
N
对于每个新请求,始终保持为 0print yielditem()
给<generator object yielditem at 0x0000000002D40EE8>
如何yield
在这个 Bottle Python 上下文中正常工作?
我期望的是:0
应该在第一个请求时1
打印,应该在第二个请求时打印,等等。
解决方案
这与 Bottle 没有任何关系,仅与生成器功能有关。
当你调用 时,你会得到一个生成器对象yielditem()
,正如 Python 告诉你的那样。它不会神奇地开始迭代它。 yielditem
如果您确实想遍历生成器对象,则必须明确地执行此操作,例如print(next(yielditem()))
.
你想如何使用那个生成器是另一回事:如果你想在多个函数调用期间访问同一个生成器对象,你可以把它放在被调用的函数之外:
generator_object = yielditem()
def print_it(): # this is like your `index` function
print "Current value: {}".format(next(generator_object))
for x in range(10): # this is like a client reloading the page
print_it()
推荐阅读
- python - pygame 不会只加载一张图片
- drivers - 从 MSI 能力结构中读取地址
- php - 使用 varchar 数据确定何时在 php/html/css 中设置 div 类的显示
- php - 有什么方法可以检查用户是否订阅了我的 youtube 频道
- python - 即使捕获到异常,hasattr 也会返回属性错误
- basic - Applesoft Basic,如何隐藏闪烁的光标?
- regex - 在正则表达式中的花括号内使用字母数字字符
- javascript - ajax 错误 checkUsn 未在 HTMLInputElement.onkeyup 中定义
- java - Java扩展和实现接口
- java - 正确使用 ConcurrentLinkedDeque