python 關鍵字之yield、next


包含yield 關鍵字的函數成為一個迭代器,yield跟return的位置一樣,只不過每次返回結果后,並沒有退出,而是等待下一次迭代,下一次迭代開始后從yield后的語句開始執行,直到再次遇到yield,返回新一次的結果。可以看成是一個List, 但是和list的不同的是占用內存少。

def subimage_generator(img, stride, patch_size, nb_hr_images):
for _ in range(nb_hr_images):
for x in range(0, img_size - patch_size, stride):
for y in range(0, img_size - patch_size, stride):
subimage = img[x : x + patch_size, y : y + patch_size, :]

yield subimage
當你調用生成器函數的時候,如上例中的程序subimage_generator()並不會執行函數體內的代碼,它僅僅只是返回生成器.函數體內的代碼只有直到每次循環迭代(for)生成器的時候才會運行。函數第一次運行時,它會從函數開始處直到碰到yield時,就返回循環的第一個值,然后,交互的運行、返回,直到沒有值返回為止。如果函數在運行但是並沒有遇到yield,就認為該生成器是空,原因可能是循環終止,或者沒有滿足任何”if/else
 訪問subimage_generator()  可以借助python中的內置函數next

image_subsample_iterator = subimage_generator(img, stride, hr_patch_size, nb_hr_images)
for j in range(stride_range):
for k in range(stride_range):
hr_samples[i, :, :, :] = next(image_subsample_iterator)
i += 1



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com