为什么当我不首先使用xrange时没有定义xrange?

Kal*_*ona 5 python list range python-3.x

在以下代码段中,

if evaluation_data: 
    n_data = len(evaluation_data)
    n = len(training_data)
    evaluation_cost, evaluation_accuracy = [], []
    training_cost, training_accuracy = [], []
    for j in list(range(epochs)):
        random.shuffle(training_data)
        mini_batches = training_data[k:k+mini_batch_size]
Run Code Online (Sandbox Code Playgroud)

你可以看到我没有使用xrange.虽然编写代码是为了在pyhton2上运行,但我重构了在python3上运行它.但是,我一直在收到以下错误:

................................Directory/network2.py", line 147, in SGD
    for j in list(range(epochs)):
NameError: name 'xrange' is not defined
Run Code Online (Sandbox Code Playgroud)

一开始,我只用过range().然后在学习了range()不是python3中的列表之后我做了list(range()).但是,我xrange在两个修订案例中都会一直收到错误.如果有人能提供帮助,我将不胜

Mar*_*ers 7

您正在运行过时的字节码,重新启动Python.

Python将源代码编译为字节码,并解释后者.这意味着解释器在编译后不能使用源代码.

但是,我们人类无法很好地读取字节码,因此当出现异常并且解释器希望我们了解出现问题的地方时,它会再次向您显示源代码.因此,当存在要显示的回溯时,根据需要加载源代码,并且基于用字节码记录的信息从源代码中获取行.

在您的情况下,您正在运行使用该名称的字节码xrange.但是您已经更正了要使用的源代码range.字节码抛出异常,Python有助于从磁盘加载源代码,并显示已经更正的源代码.

解决方案是通过重新启动告诉Python重新编译源代码.如果重新启动没有帮助,那么Python已经确定源代码比它缓存的字节码更旧.删除__pycache__源代码旁边的目录以清除字节码缓存,并删除.pyc可能与源位于同一目录中的任何文件.

请注意,您可以放弃list()通话; 你不必有一个for循环列表来工作; for j in range(epoch):工作得很好.