Python - 烧瓶 - 在默认浏览器中打开两个网页
问题描述:
以下代码是here给出的答案的变体。 两个webbrowser.open()
被要求,他们在时间上稍微分开。Python - 烧瓶 - 在默认浏览器中打开两个网页
两个网页呈现正常,但都显示第二个(Chris
)参数。
为什么Pat
没有迎接?
import random, threading, webbrowser
from flask import Flask, render_template_string
app = Flask(__name__)
@app.route('/<name>')
def index(name):
return render_template_string('''<h3>Hello, {{ name }}!</h3>''', name=name)
if __name__ == '__main__':
names = ['Pat', 'Chris']
port = 5000 + random.randint(0, 999)
wait = 1.25
for name in names:
url = "http://127.0.0.1:{0}/{1}".format(port, name)
threading.Timer(wait, lambda: webbrowser.open(url)).start()
wait += 0.5
app.run(port=port, debug=False)
答
在循环中定义回调函数是个问题,它叫做后期绑定。两个lambda最终都会看到url
的最后一个值。与更换拉姆达:
functools.partial(webbrowser.open, url)
或取消计时器,并在循环刚time.sleep(0.5)
。
我明白了。谢谢。对于那些看到这个,然后无法在书中找到“后期装订”的人来说,在“关闭”下你可能会有更好的运气。 (我特指Beazley和Lutz的YMMV。) – Calaf