当前位置: 首页>前端>正文

python 模拟 fingerprintjs3 生成设备id python生成器应用

         本文主要讲解python生成器的使用方法以及优点,对其背后的原理不进行深程度的研究。


 

目录

前言:

一 、生成器的创建

通过def&&yield

通过规则表达式

 二、生成器的使用及优势


前言:

        我们都知道数据存储在计算机里是需要耗费内存的。当我们需要遍历一组数据或对这一组数据进行操作时,事先生成好的数据,特别是当数据量很大的时候;我们或许一时用不上所有的数据,但是这些数据还是会占用计算机的内存空间。生成器可以为我们带来的是,每当我们需要一点数据时,取出一点数据,在需要时,再取出;有效的解决了空间浪费的问题。


一 、生成器的创建

通过def&&yield

        在python语言中,生成器主要有两种。第一种也是最常用的一种是把函数中的return换成yield。python中数据生成器与函数的返回值不同。函数的返回值是一次性的返回所有结果;而数据生成器是当且仅当需要使用该数据时才会返回。当执行到yield语句时,会暂停并保存所执行的信息,返回yield后的语句;当再次调用生成器的数据时,会从yield后的语句开始执行。

def a():
	for i in range(5):
		it = [i]
		yield it
		it = []

如图所示:

        我们定义了一个生成器a,因为我们用到了保留字yield;如果将yield换成return,那么a就是一个函数,但是此时python会报错,因为后面还有一条it = [],当作为函数时没有对齐,不符合python语法。但是作为生成器的a没有任何问题,因为只有遍历a内的数据,才会执行a,然后返回yeild后的语句,再次获取a内的数据时,从yield再次开始执行。

python 模拟 fingerprintjs3 生成设备id python生成器应用,python 模拟 fingerprintjs3 生成设备id python生成器应用_数据,第1张

        如上图所示,我们定义了一个数据生成器a,调用数据生成器赋值给b,此时的b就是一个生成器。

通过规则表达式

g = (x * x for x in range(10))

如图所示:g就是一个数据生成器。其中x*x就是一个规则表达式,g里面的所有元素都是通过这一规则表达式生成的。

python 模拟 fingerprintjs3 生成设备id python生成器应用,python 模拟 fingerprintjs3 生成设备id python生成器应用_生成器_02,第2张


 二、生成器的使用及优势

def b():
     for i in range(5):
          it = [range(i)]
          yield it
          it = []
          yield it
c = b()
for i in c:
     print(i)

如图所示,我们定义了一个函数生成器b并赋值给c,依次遍历c中所有的元素。

python 模拟 fingerprintjs3 生成设备id python生成器应用,python 模拟 fingerprintjs3 生成设备id python生成器应用_数据_03,第3张

 

        从运行结果来看,正如我们在前文所描述的一样,生成器内原本并没有值,只是当我们需要生成器内的数据时,生成器才会从b内的yield返回值给我们。之后的yield = []是说当我们每取完一次it内的数据,就将it列表清空,可以理解为减少内存的占用;这样,当我们再次需要一组数据时,再次调用c内的数据(通过for循环),这时生成器会从yield处继续执行。继而在获取数据的同时减少了内存的占用。

具体过程如下:

python 模拟 fingerprintjs3 生成设备id python生成器应用,python 模拟 fingerprintjs3 生成设备id python生成器应用_数据_04,第4张

python 模拟 fingerprintjs3 生成设备id python生成器应用,python 模拟 fingerprintjs3 生成设备id python生成器应用_生成器_05,第5张

 

python 模拟 fingerprintjs3 生成设备id python生成器应用,python 模拟 fingerprintjs3 生成设备id python生成器应用_数据_06,第6张

python 模拟 fingerprintjs3 生成设备id python生成器应用,python 模拟 fingerprintjs3 生成设备id python生成器应用_python_07,第7张

参考:https://www.runoob.com/python3/python3-iterator-generator.html

           


https://www.xamrdz.com/web/2h61942382.html

相关文章: