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


發佈了82 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章