Python基础 | 你应该掌握的generator (一)

简介: Python基础 | 你应该掌握的generator (一)

问题描述



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的情况。



for i in a: 
print(i)

输出:

0

1

2

3

4

5

6

7

8

9




for j in a:   
print(j)

输出:

0

1

2

3

4

5

6

7

8

9


上面的输出结果和我们之前理解的一样,没什么不同之处。接下来看一下generator类型的变量b的情况。




for i in b: 
print(i)

输出:

0

1

2

3

4

5

6

7

8

9




for j in b:  
print(j)

输出:

(空)


第一次用for循环遍历的时候,打印了所有的元素,但是第二次遍历的时候,什么也没有打印。出现了很奇怪的现象。这就是generator和list的最大的区别。


结语


generator可以理解为是一种生产消费型的数据结构,先生产数据,然后进行消费,而且消费的数据具有不可逆性。如上面的示例,生产了10个元素,第一次循环就消费了十个,还剩下零个元素。而第二个循环再次进行消费时,此时已没有任何元素,因此输出为空。


而对于list来说,不会因为第一次遍历,就会影响后面的遍历,每一次遍历都是相互独立的,不会对后续产生任何影响。


为什么要设计generator这样的数据结构呢?它的意义在于什么地方?有什么作用呢?欢迎持续关注后续文章,也欢迎留言讨论。

目录
打赏
0
0
0
0
14
分享
相关文章
Python的生成器(Generator)
【7月更文挑战第2天】
69 1
python yield generator 详细讲解
python yield generator 详细讲解
50 0
深入解析Python中的生成器(Generator) 及其高级应用
深入解析Python中的生成器(Generator) 及其高级应用
248 0
|
10月前
|
Python 的异步编程:什么是协程(Coroutine)和生成器(Generator)之间的区别?
Python 的异步编程:什么是协程(Coroutine)和生成器(Generator)之间的区别?
93 0
【Python】创建生成器generator
【Python】创建生成器generator
67 0
python入门-----生成器generator
python入门-----生成器generator
126 0
python入门-----生成器generator
【Python高级语法】——生成器(generator)
⽣成器是这样⼀个函数,它记住上⼀次返回时在函数体中的位置。对⽣成器函数的第⼆次(或第 n 次)调⽤跳转⾄该函数中间,⽽上次调⽤的所有局部变量都保持不变。 ⽣成器不仅记住了它数据状态;⽣成器还记住了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。
160 0
【Python高级语法】——生成器(generator)
Python 高级特性(4)- 生成器 generator
Python 高级特性(4)- 生成器 generator
236 0
Python 高级特性(4)- 生成器 generator

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等