NameError:name 'xrange' is not defined

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IMWTJ123/article/details/87861523

今天运行程序时,发现出现 NameError:name 'xrange' is not defined 这个错误,程序是没有问题的,不要惊慌,版本问题。

一、问题出现原因

     在 Python 2 中,经常会用 xrange() 创建一个可迭代对象,通常出现在 “for循环” 中,这种行为与生成器非常相似。在 Python 3 中,range() 的实现方式与 xrange() 函数相同,所以就不存在专用的 xrange(),如果你在Python 3使用xrange()就会出现 NameError:name 'xrange' is not defined 这个错误。

解决方法:将 xrange( ) 函数全部换为 range( )

二、xrange() 函数

xrange() 函数用法与 range 完全相同,range 生成的是一个数组,而 xrange() 生成的是一个生成器,每次按需生成一个值,只占用少量的内存空间。

xrange 语法:

  1. xrange (stop)
  2. xrange (start, stop[, step])

xrange 参数说明:

  • start: 计数从 start 开始。默认是从 0 开始。例如 xrange(4) 等价于 xrange(0, 4)(语法12)
  • stop: 计数到 stop 结束,但不包括 stop。例如:xrange(0, 4) 是 [0, 1, 2, 3 ] 没有 4(语法1)
  • step:步长,默认为1。例如:xrange(0, 4) 等价于 xrange(0, 4, 1)是 [0, 1, 2, 3 ](语法2)

      由于我用的是 Python 3 ,range() 的实现方式与 xrange() 函数相同,所以我就展示一下 range() 的用法,当然你也可以在Python 2 中试试 xrange() 的用法。

range(4)
Out[6]: range(0, 4)

list(range(4))
Out[7]: [0, 1, 2, 3]

list(range(0,4))
Out[8]: [0, 1, 2, 3]

list(range(0,8,2))
Out[9]: [0, 2, 4, 6]

     在运行是我们发现 Python 3 中的 range() 和 Python 2 中 xrange() 执行速度有差异,由于这两者的实现方式相同,因此理论上执行速度应该也是相同的,这里的速度差别仅仅是因为 Python 3 的总体速度就比 Python 2 慢。

 

三、print 在 Python 2 和 Python 3 中的用法

    Python 2中的print语句不带括号,当然额外的使用括号也行的。Python 3中的print()函数必须用括号将需要输出的对象括起来。如果在Python 3中不带括号调用print函数时,会触发SyntaxError: Missing parentheses in call to 'print'。

 

 

 

展开阅读全文

没有更多推荐了,返回首页