无限循环,未知原因
infinite loop, unknown reason
出于某种原因,这段代码似乎进入了一个无限循环,我不知道为什么
import timeit
t = timeit.Timer(stmt="for num in num_list: print(num)",
setup="num_list = [digit for digit in range(1, 101)]")
print(t.timeit())
我通过 Anaconda 安装了 python 版本 3.6.2。
我已经在 Spyder IDE 和命令提示符下 运行 试过了,两者的结果相同。
如果我将设置更改为生成器而不是列表理解,一切正常,同样可以说 运行 超时的相同代码。
我什至尝试过重新启动计算机,因为你知道,我必须尝试将其关闭并重新打开,它适用于大多数情况。
这不是一个无限循环——只是一个很长的循环。 setup
仅 运行 一次,因此当您使用生成器表达式时,它会在 stmt
的第一个 运行 之后被消耗,并且不再打印任何内容。当您使用列表推导式时,每个列表元素都会在 stmt
中每隔 运行 打印一次,导致对 print
的 100 × 1000000 次调用。 (100 万是 Timer.timeit()
的默认迭代次数。)
出于某种原因,这段代码似乎进入了一个无限循环,我不知道为什么
import timeit
t = timeit.Timer(stmt="for num in num_list: print(num)",
setup="num_list = [digit for digit in range(1, 101)]")
print(t.timeit())
我通过 Anaconda 安装了 python 版本 3.6.2。
我已经在 Spyder IDE 和命令提示符下 运行 试过了,两者的结果相同。
如果我将设置更改为生成器而不是列表理解,一切正常,同样可以说 运行 超时的相同代码。
我什至尝试过重新启动计算机,因为你知道,我必须尝试将其关闭并重新打开,它适用于大多数情况。
这不是一个无限循环——只是一个很长的循环。 setup
仅 运行 一次,因此当您使用生成器表达式时,它会在 stmt
的第一个 运行 之后被消耗,并且不再打印任何内容。当您使用列表推导式时,每个列表元素都会在 stmt
中每隔 运行 打印一次,导致对 print
的 100 × 1000000 次调用。 (100 万是 Timer.timeit()
的默认迭代次数。)