我观察许多教程,for i in range(12) 只是生成数字跟序列
跟切片截取列表元组,完全不可与
>>> (i for i in range(20))
<generator object <genexpr> at 0x0000000002CF3890>
>>> type(i for i in range(20))
<class 'generator'>
>>> tuple(i for i in range(20))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
>>>
>>> g = (i for i in range(10))
>>> g
<generator object <genexpr> at 0x03CE71E8>
>>> a = [i for i in g]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = [i for i in g]
>>> b
[]
>>>
两边用小括号(不是中括号)生成的叫生成器(generator),也是迭代器的一种,所以只能遍历一遍。
切片是容器类可迭代对象的一种引用方法,和迭代器完全不同。
两者有点像链表和数组的区别。
元组是不能修改的嘛,所以不能用推导式生成,小括号生成的叫生成器,再tuple一下就是元组了。