Python 为什么使用range()使索引和元素同时可用是不好的?
我现在正在网上阅读一些Python的东西,突然出现了一些有趣的东西。基本上它说不要这样做:Python 为什么使用range()使索引和元素同时可用是不好的?,python,python-2.7,Python,Python 2.7,我现在正在网上阅读一些Python的东西,突然出现了一些有趣的东西。基本上它说不要这样做: for i in range(len(mylist)): print i, mylist[i] for (i, item) in enumerate(mylist): print i, item 相反,它说最好这样做: for i in range(len(mylist)): print i, mylist[i] for (i, item) in enumerate(myli
for i in range(len(mylist)):
print i, mylist[i]
for (i, item) in enumerate(mylist):
print i, item
相反,它说最好这样做:
for i in range(len(mylist)):
print i, mylist[i]
for (i, item) in enumerate(mylist):
print i, item
通常我会选择第一个选项,但我认为这样做没有任何潜在的风险。为什么第一个代码不好?与后一种代码相比,第一种代码体是否会对后续代码行产生某种影响?除了可读性因素外,第二种代码段适用于任何iterable,而第一种代码段仅适用于可以索引的对象(例如列表)。例如,假设您正在使用一个集合:
>>> myset = {1,2,3}
>>>
>>> enumerate(myset) # works
<enumerate object at 0x2c9440>
>>>
>>> myset[0] # doesn't work
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
myset={1,2,3}
>>>
>>>枚举(myset)#工作
>>>
>>>myset[0]#不起作用
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“set”对象不支持索引
这增加了代码的灵活性,如果您选择切换数据结构,您的生活也会变得更轻松。因为第二个更容易阅读,也更不容易出错。好吧,fwiw,前者有一个函数调用,而不是后者有两个。