python强大之处列表推导式和生成器
# python强大之处列表推导式和生成器
学习Python一定会见到好多大神写的看不懂的东西,其实这些东西有的有价值,有的没有价值,就是让你看不懂。
## 列表推导式
好多人都听过列表推导式,这个究竟是个什么东西呢。我们来看看,听我的讲解会简单很多,欢迎大家关注呦。
列表推导式是什么,其实就是个列表,我们看看演变过程
```python
list1 = []
for x in range(10):
list1.append(x)
```
列表推导式可以这样
```python
list1 = [x for x in range(10)]
```
那么有人问了,这两个有区别,答案是没有的,就是第二个看起来高大上,让你看不懂,能美观一些,也就仅此了。我们今天只来只是简单带一下列表推导式,没有具体场景的知识点,我不会过多介绍。下面的知识点就不一样了,它和列表推导式很像,但是场景和功能跟强大。
## 生成器
什么是生成器,繁琐的概念也不讲,它就是一个可以迭代的迭代对象。
它长什么样子呢,我们来看一下、
```python
generator = (i for i in range(0,10))
```
其实生成器和列表推导式很像,就是最外层是**[]**和**()**的符号不同,这就决定了他们是不同的对象(后面我们会讲什么是对象)
那么他们只有这么点区别?当然不是,我们来看一下。
```python
# 生成器
generator = (i for i in range(0,2))
print(next(generator))
print(next(generator))
for i in generator:
print(i)
for i in generator:
print(i)
#打印结果
0
1
#列表推导式
list1 = [i for i in range(0,2)]
print(list1[0])
print(list1[1])
for i in list1:
print(i)
for i in list1:
print(i)
#打印结果
0
1
0
1
0
1
```
结果我们可以分析,我们可以将数据比作**面包**,生成器是预先做出来10个面包,来一个人买就拿走一个直到没有。而列表推导式是不管来几个人,我都是现做10个然后卖。
## 生成器的优点
这就没了,我看来也没啥区别啊。我们来讲一下生成器的特点。还是两段代码。
```python
list1 = [i for i in range(1000000000)]
for i in list1:
print(1)
```
```python
generator = [i for i in range(1000000000)]
for i in generator:
print(1)
```
分别运行这两段代码,看看运行结果有什么不同,同时,看看我们计算机在运行这两段代码时内存的变化。尝试之后接着看我的解答。
生成器在循环之前已经把需要循环的数据处理完了。所以循环时候内存不会有波动。这就是生成器的好处,当数据很大的时候,用生成器可以降低计算的内存消耗。计算器缺的就是内存,当内存溢出的时候往往会有意外情况发生。好了,这里只是讲解了一点皮毛,具体的底层原理,有需要可以私聊我。
码字不易,欢迎大家在评论区留言,收藏。或者加入[群聊](https://jq.qq.com/?_wv=1027&k=vH00muGu)一起进步学习。