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)一起进步学习。
上一篇:SHA-256加密算法封装[我的代码库]


下一篇:PHP弱类型安全问题总结