美文网首页工作生活
迭代器生成器、 http协议 、浏览器解析过程

迭代器生成器、 http协议 、浏览器解析过程

作者: 星河入怀fd | 来源:发表于2019-07-02 08:49 被阅读0次

    迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

    可迭代对象:我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。

    可迭代对象的本质:

    我们分析对可迭代对象进行迭代使用的过程,发现每迭代一次(即在for...in...中每循环一次)都会返回对象中的下一条数据,一直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有一个“人”去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的“人”称为迭代器(Iterator)。

    可迭代对象的本质就是可以向我们提供一个这样的中间“人”即迭代器帮助我们对其进行迭代遍历使用。

    可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据.

    那么也就是说,一个具备了__iter__方法的对象,就是一个可迭代对象iter()函数与next()函数

    list、tuple等都是可迭代对象,我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使用next()函数来获取下一条数据。

    什么是生成器?

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    怎样创建生成器

    在一个一般函数中使用yield关键字,可以实现一个最简单的生成器,此时这个函数变成一个生成器函数。yield与return返回相同的值,区别在于return返回后,函数状态终止,而yield会保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行。

    生成器函数与一般函数的不同

    一下是几点不同:

    生成器函数包含一个或者多个yield

    当调用生成器函数时,函数将返回一个对象,但是不会立刻向下执行

    像__iter__()和__next__()方法等是自动实现的,所以我们可以通过next()方法对对象进行迭代

    一旦函数被yield,函数会暂停,控制权返回调用者

    局部变量和它们的状态会被保存,直到下一次调用

    函数终止的时候,StopIteraion会被自动抛出。

    简述http协议

    1、它是超文本传输协议,是我们的浏览器和服务器之间传输数据时的一种约定

    2、请求时至少有请求头,请求头至少有请求方式、请求目标、和协议版本,还可以包含服务器地址、浏览器版本、可接收格式、压缩格式、语言等,也可以有请求体,与请求头用空行隔开,

    3、服务器返回的响应包含请求头和请求体,请求头至少有协议版本和状态码,还可以包含编码格式、请求体长度、服务器时间、Set-Cookie等,空行之后是请求体

    4、请求和响应都是基于TCP发送的字符串,如果是二进制的数据还需要编码和解码,这就是HTTP协议

    浏览器解析过程

    浏览器读取到页面的HTML源码后会解析,并根据里面链接再发送HTTP请求,拿到相应的图片、JS、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求。

    相关文章

      网友评论

        本文标题:迭代器生成器、 http协议 、浏览器解析过程

        本文链接:https://www.haomeiwen.com/subject/oluacctx.html