它们产生相同的结果。
>>> for i in range(10, -1, -1):
... print(i)
...
10
9
8
7
6
5
4
3
2
1
0
与之相比:
>>> for i in reversed(range(0, 10 + 1):
... print(i)
...
10
9
8
7
6
5
4
3
2
1
0
据我了解,Python3的range
创建的是生成器,而不是将整个范围存储在内存中。reversed
同样是一次生成一个值。是否有使用一个而不是另一个的原因?
range(n-1, -1, -1)
和reversed(range(n))
之间。第二个选项在可读性方面是明显的赢家,并且它更少出错。考虑到时间差异很小,并且循环体几乎总是占主导地位,我几乎总是会选择reversed
。 - user2357112__reversed__
方法,那么reversed
就会委托给该函数。或者,如果对象同时具有__len__
和__getitem__
方法,则可以从这些方法生成智能反转迭代器。只有当这两个选项都不可用时,reversed
才会回退到在内存中缓存整个序列。 - Dunesreverse(range())
,没有任何惩罚,但是对于reversed(myprimenumbergenerator(1000))
,除非你遵循Dunes的提示,否则会有惩罚。 - Dov Grobgeldreversed(reversed(range(10)))
,你会发现外部的reversed
调用只是抛出一个错误,而不是尝试存储所有输出以进行反转。 - user2357112