我的教授和这个人声称range创建了一系列价值观.
"注意:范围函数只返回一个包含从x到y-1的数字的列表.例如,范围(5,10)返回列表[5,6,7,8,9]."
我认为这是不准确的,因为:
type(range(5, 10))
<class 'range'>
Run Code Online (Sandbox Code Playgroud)
此外,访问创建的整数的唯一明显方法range是迭代它们,这使我相信标记range为列表是不正确的.
什么是Python中的懒惰评估?
一个网站说:
在Python 3.x中,range()函数返回一个特殊的范围对象,它根据需要计算列表的元素(延迟或延迟评估):
>>> r = range(10)
>>> print(r)
range(0, 10)
>>> print(r[3])
3
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我的一个课程要求在Python中完成作业,作为练习,我一直在确保我的程序在Python 2和Python 3中都能正常工作,使用如下脚本:
#!/bin/bash
# Run some PyUnit tests
python2 test.py
python3 test.py
Run Code Online (Sandbox Code Playgroud)
我一直在做的一件事是range使用这段代码在两个版本中使工作相同:
import sys
# Backport Python 3's range to Python 2 so that this program will run
# identically in both versions.
if sys.version_info < (3, 0):
range = xrange
Run Code Online (Sandbox Code Playgroud)
这是一个坏主意吗?
编辑:
这样做的原因是,xrange与range工作方式不同在Python 2和Python 3,我希望我的代码做同样的事情在这两个.我可以反过来做,但让Python 3像Python 2一样工作似乎很愚蠢,因为Python 3是"未来".
这是一个为什么只是使用range不够好的例子:
for i in range(1000000000):
do_something_with(i)
Run Code Online (Sandbox Code Playgroud)
我显然没有使用该列表,但在Python 2中,这将使用疯狂的内存量.