python中的For循环在每次迭代时初始化一个外部变量



我不明白为什么下面的代码给出不同的结果:

from datetime import datetime
def foo():
    return {datetime.now() : True}
a = {}
a.update(foo())
a.update(foo())
a.update(foo())

:

a = {}
for i in xrange(3):
    a.update(foo())

在前一种情况下,a最终得到三个元素,而在后一种情况下,a最终只得到一个元素(来自上一次迭代)。

随你的运气。第二个代码可能在一毫秒(或微秒,取决于您的操作系统)内执行,并给出三个相同的日期时间,第一个代码不太可能这样做(在您的系统/您执行代码的方式上)。继续尝试,你可能会得到两个元素。不要写靠运气的代码

你最终得到的元素数量将取决于Python在datetime.now()的粒度内执行对foo的调用次数。

如果您在交互式控制台中运行此命令,则在提示符处执行的语句之间,控制台将执行内务管理(例如,显示>>>提示符),这将大大延迟下一条语句,而对于for循环,循环将在控制台执行任何操作之前完整执行。

最新更新