python基础 生成器

 1 import time
 2 #python中当我们需要一个循环体,可以使用类似下面命令生成一个有规律的列表,然后对此列表进行循环。下面的语句称为列表生成式。
 3 # 当被循环列表规模很大时其需要在循环开始到整个循环结束一致占用全量内存空间,而且还有可能整个循环体只需要访问前面几个数据,此时造成空间浪费。
 4 list1 = [i**2 for i in range(10)]
 5 print(list1)
 6 #将列表生成式的‘[]’改为‘()’即将列表生成式改为生成器,生成器只有在调用时相应的数据才会生成,不会造成内存空间预占。
 7 generator1 = (i**2 for i in range(10))
 8 print(generator1)
 9 for i in generator1:
10     print(i)
11 #列表的内容可以通过[index]下标获取,生成器的数据如何获取呢?通过next()方法一个一个取或者for循环一个一个取,没有别的方法。
12 generator2 = (i**2 for i in range(10))
13 print(generator2.__next__()) #0
14 print(generator2.__next__()) #1
15 
16 #当简单的列表生成式无法满足循环体数据生成规律时,我们如何使用函数生成一个生成器呢?
17 #生成ip地址字符串的生成器,只需要将构造好的字符串全面加yield
18 l1 = [i for i in range(0,256)]
19 l2 = l1.copy()
20 l3 = l1.copy()
21 def str_ip(ip_start):
22     for ip1 in range(256):
23         for ip2 in range(256):
24             for ip3 in range(256):
25                 ip_str_format = "%s.%s.%s.%s"%(str(ip_start), str(ip1), str(ip2), str(ip3) )
26                 yield ip_str_format
27 
28 #函数调用将其赋给一个变量,此时这个变量就是生成器
29 str_ip_gen = str_ip(66)
30 #使用生成器的next方法来获取数据
31 for i in range(300):
32     print(str_ip_gen.__next__())

猜你喜欢

转载自www.cnblogs.com/flags-blog/p/11939314.html
今日推荐