问题描述
a = [x for x in range(10)] b = (x for x in range(10))
你能看出上面两行用python编写的代码有什么区别吗?
如果你能够很快的看出区别,那么恭喜你,你的python基础非常的扎实,如果不能,那么本文对于你来说就非常有价值。
表面上看二者的区别在于,一个使用了中括号[],一个使用了小括号(),但是这两者之间有什么本质的区别呢?
问题分析
首先来看以下中括号的情况:
a = [x for x in range(10)] type(a) # list
使用type(a)方法可以查看a的类型是list,这就是平时所说的python的列表类型。
接着来看一下小括号的情况:
b = (x for x in range(10)) type(b) # generator
可以看到,b的类型是generator。
此时可以看到二者之间的区别,一个是list类型,另外一个是generator类型,但是这二者之间有什么区别呢?接下来将通过案例的形式来展示它们的区别。
设计一个案例,分两次来遍历所有的元素,第一次遍历的循环变量设置为i,第二次遍历的循环变量设置为j,接下来观察它们的区别。
首先还是来看list类型的变量a的情况。
输出:
输出:
上面的输出结果和我们之前理解的一样,没什么不同之处。接下来看一下generator类型的变量b的情况。
for i in b: print(i)
输出:
for j in b: print(j)
结语