它们产生相同的结果。
>>> for i in range(10, -1, -1):
... print(i)
...
10
9
8
7
6
5
4
3
2
1
0
Run Code Online (Sandbox Code Playgroud)
对比:
>>> for i in reversed(range(0, 10 + 1):
... print(i)
...
10
9
8
7
6
5
4
3
2
1
0
Run Code Online (Sandbox Code Playgroud)
据我了解,Python3range创建一个生成器,而不是将整个范围存储在内存中。reversed我认为,同样一次会产生一个值。有什么理由使用其中一种而不是另一种吗?
Python 中的函数reversed()有一个特殊情况,即当您向其传递range(). reversed(range(...))和之间唯一真正的区别是,您可以多次range(...)迭代 a ,但返回一个迭代器,因此它只能使用一次。range()reversed()
>>> iter(range(0, 10))
<range_iterator object at 0x7f735f5badb0>
>>> reversed(range(0, 10))
<range_iterator object at 0x7f735f5baf30>
Run Code Online (Sandbox Code Playgroud)
您可以看到,在这两种情况下,迭代器类型都是range_iterator。因此,循环本身的性能在这两种情况下都是相同的。
由于唯一的开销reversed()是一个额外的函数调用,所以我总是reversed(range(10))更喜欢range(9, -1, -1).
| 归档时间: |
|
| 查看次数: |
10915 次 |
| 最近记录: |