怎样判断网站的好坏,wordpress文本增强页面,微小店网站建设平台,wordpress申请表单1、什么是生成器我们可以把生成器理解为一个高端的列表。生成器就是一个集算法和列表还有依次读取于一体的功能。因为如果列表存储的内容过多就会造成内存的浪费。但是如果“列表”内的元素可以通过某种规则展示出来、且我们只需要前几项的元素#xff0c;我们就可以通过使用生…1、什么是生成器 我们可以把生成器理解为一个高端的列表。生成器就是一个集算法和列表还有依次读取于一体的功能。因为如果列表存储的内容过多就会造成内存的浪费。但是如果“列表”内的元素可以通过某种规则展示出来、且我们只需要前几项的元素我们就可以通过使用生成器来进行。2、生成器怎么用# 列表的用法
a [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 生成器的用法
a (x for x in range(10))
generator object genexpr at 0x0000027656609408 我们输出的是一个generator。而列表打印的出来的就是元素。我们如何将generator的元素打印出来呢使用next函数将generator的元素打印出来。next(b)
0
next(b)
1
next(b)
2
next(b)
3
next(b)
4
next(b)
5
........
#当元素超出时报错停止
next(b)
Traceback (most recent call last):File stdin, line 1, in module
StopIteration对于这种情况我们不必一直使用next对其进行调用我们可以使用使用for循环对其进行调用这样就可以省去很多事情便于操作。这是一种简单的用法下面我们将函数信息与生成器结合使用。其大致使用方法跟一般的函数循环的使用。#使用generator达到生成器的效果
def fid(max):n, a, b 0, 0 ,1while n max:yield ba , b b , a bn 1
f fid(6)
generator object fid at 0x00000201278195E8
next(f)
1
next(f)
1
next(f)
2
next(f)
3我们可以看出yield的效果和return的效果差不都但是yield不会使函数值返回而是使得函数的值暂时挂起。我们使用next使得函数的值输出这极大的提高了我们的效率。3、生成器在深度学习中的应用def xs_gen_pro(data,batch_size):lists datanum_batch math.ceil(len(lists) / batch_size) # 确定每轮有多少个batchfor i in range(num_batch):if(i0):np.random.shuffle(lists)batch_list lists[i * batch_size : i * batch_size batch_size]np.random.shuffle(batch_list)batch_x np.array([x for x in batch_list[:,0]])batch_y np.array([y for y in batch_list[:,1]])yield batch_x, batch_y
if __name__ __main__:#data_gen xs_gen(data,5)for x,y in xs_gen(data,5):print(item,x,y)for x,y in xs_gen(data,5):print(item,x,y)为了方便演示上面是直接对列表进行读入操作一般在用的时候是读取path列表在按照path提取数据。item [50 30 20 90 80] [5 3 2 9 8]
item [ 60 0 100 110 40] [ 6 0 10 11 4]
item [120 10 140 130 150] [12 1 14 13 15]
item [70] [7]
item [120 90 70 80 130] [12 9 7 8 13]
item [ 10 150 100 0 50] [ 1 15 10 0 5]
item [140 30 60 20 110] [14 3 6 2 11]
item [40] [4]这样就可以很好的读取到数据了。4、再看生成器前面已经对生成器有了感性的认识我们以生成器函数为例再来深入探讨一下Python的生成器1、语法上和函数类似生成器函数和常规函数几乎是一样的。它们都是使用def语句进行定义差别在于生成器使用yield语句返回一个值而常规函数使用return语句返回一个值。2、自动实现迭代器协议对于生成器Python会自动实现迭代器协议以便应用到迭代背景中如for循环sum函数。由于生成器自动实现了迭代器协议所以我们可以调用它的next方法并且在没有值可以返回的时候生成器自动产生StopIteration异常。3、状态挂起生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态保留足够的信息以便之后从它离开的地方继续执行。5、使用生成器所需的注意事项我们通过对上面的输出进行分析可以得出我们可以知道输出仅有一次。因此我们使用生成器时需要注意的是生成器只能遍历一次。6、参考赖明星——《python生成器到底有什么优点》小宋是呢——《[开发技巧]·深度学习使用生成器加速数据读取与训练简明教TensorFlowpytorchkeras》