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

时间:2013-03-12 15:27:05

标签: python for-loop dictionary

我无法理解为什么以下代码会产生不同的结果:

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中只有一个元素(从上一次迭代开始)。

2 个答案:

答案 0 :(得分:5)

祝你好运。第二个代码可能在一毫秒(或微秒,取决于您的操作系统)中执行,并提供三个相同的日期时间,首先是不太可能这样做(在您的系统/您执行代码的方式)。继续尝试,你最终可能会有两个元素。不要编写依赖运气的代码。

答案 1 :(得分:3)

您最终得到的元素数量取决于foodatetime.now()的粒度范围内执行>>>次调用的次数。

如果您在交互式控制台中运行此操作,那么在提示符处执行的语句之间,控制台将执行内务处理(例如,显示for提示符),这将显着延迟下一个语句,而对于{ {1}}循环循环将在控制台执行任何操作之前完整执行。

相关问题