### iterable, iterator & generator
我该从哪儿说起呢?今天下午,我很专注地学了四个多小时,在看一个技术细节,从下午三点学到了晚上七点。
早上7点,我起来,在睡了6个小时之后。再之前,我和我“舅舅”(一个要好的前同事)视频聊天了两个多小时,最开始,我们模拟了一下面试的情景,他上来问了我一句话:“你介绍一下自己吧。”,我一下子就面红耳赤,说不出话来了,紧张惹。花了三四分钟才慢慢放松下来,可以比较“正常”地说话了,我把自己编的那一套瞎话讲给他听,他又问了我一些技术问题。答不上来我就记在纸上了。后面我们就开始聊起女人的话题了,啊。一点多睡的。
今天早上起来第一件事,本来是要用学习的办法来拖延的,但还是,先登上了招聘网站,把简历填好,然后向两家预先选定的公司的HR发送了打招呼的消息。然后就设了番茄钟开始学习,过个25分钟就去check一下看有没有回应。今天一天都没有回应惹。我舒了口气。我觉得我已经进入一个崭新的新纪元———用学习来逃避工作。完美。这比起之前的用娱乐来拖延逃避要好太多啦。你知道我写完这篇打卡日记后会干啥吗?我觉得我有相当大的几率会去看一本关于编程思想的书。并不是为了要找工作要多学一点。当然没有这些促动力我可能是不会把注意力转移到这方面的。但是,是真的这事儿本身做起来就有意思。如果不是这样的话,我压根做不下去的。
在文章的开头我提到了,今天下午我学了差不多有四个小时。那四个小时过得真快啊,不用数时间,注意力全在理解技术概念上了。而且一点也不累。像现在,我也挺精神抖擞的。和你们说一下我今下午学什么了吧。学的东西就在标题里,iterable, iterator & generator. ”这TM是什么玩意儿?“你心里要犯嘀咕了吧,且听我慢慢道来。你知道的(我知道你不知道),咱们的数据是以二进制储存在电脑里的,这些数据可以分为两部分,一部分是以相对静态的方式存在磁盘(硬盘)里,另外一部分需要动态运算的数据则存在内存里,你现在在荧幕上看到我写的这篇文章的视觉效果(包括文字的显示),就依赖了内存里的动态数据。你的内存的大小是有限的,有的时候里面运算的数据太多了(同时开启的APP太多),就会出现卡顿的情况,所以程序能高效率地利用内存空间是很重要的事情。好了,我们要继续跳转到比较底层的概念上去了,我们在内存里运算的这些数据,很多是结构化的数据,有一种数据结构,叫列表(数组),它的形式就是把一系列数按先后顺序(不是大小)排列起来,放在一个个的节点(内存位置)上,有点像在一列很长的火车(列表)的每节车厢(节点)里放一头大象(数)的感觉。OK,那我现在要把1到100亿加起来打印出来,要怎么做?有种很简单粗暴的方法就是先生成从1到100亿的一个列表,把它存放在内存里,再把这个列表的数值从头到尾加起来。这样的话,你存进去,你10G内存(近似)就没了。在这种情况下,另一种巧妙的办法是,使用generator。它的原理呢,很简单,就是设好了数值增加的规则,但是每次只返回一个数值。你的内存有救了!换成现实中的例子,就好比是一个餐馆今天要接纳1000个客人,笨方法就是先把这一千个人一股脑全塞进餐厅里,再开始给他们做菜。。。。。而另外一种方法则是按照规则依序接待他们,一次一小批,一次一小批,直到处理完。
啊,感觉写得有点狗屁不通,不过今天的1000字又写完啦,嘻嘻
网友评论