包含yield 關(guān)鍵字的函數(shù)成為一個(gè)迭代器,yield跟return的位置一樣,只不過(guò)每次返回結(jié)果后,并沒有退出,而是等待下一次迭代,下一次迭代開始后從yield后的語(yǔ)句開始執(zhí)行,直到再次遇到y(tǒng)ield,返回新一次的結(jié)果。可以看成是一個(gè)List, 但是和list的不同的是占用內(nèi)存少。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當(dāng)你調(diào)用生成器函數(shù)的時(shí)候,如上例中的程序subimage_generator()并不會(huì)執(zhí)行函數(shù)體內(nèi)的代碼,它僅僅只是返回生成器.函數(shù)體內(nèi)的代碼只有直到每次循環(huán)迭代(for)生成器的時(shí)候才會(huì)運(yùn)行。函數(shù)第一次運(yùn)行時(shí),它會(huì)從函數(shù)開始處直到碰到y(tǒng)ield時(shí),就返回循環(huán)的第一個(gè)值,然后,交互的運(yùn)行、返回,直到?jīng)]有值返回為止。如果函數(shù)在運(yùn)行但是并沒有遇到y(tǒng)ield,就認(rèn)為該生成器是空,原因可能是循環(huán)終止,或者沒有滿足任何”if/else 訪問(wèn)subimage_generator() 可以借助python中的內(nèi)置函數(shù)nextimage_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
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注