日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍

發布時間:2023/12/1 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python迭代器和生成器介紹迭代器

迭代器是一個實現了迭代器協議的對象,Python中的迭代器協議就是有next方法的對象會前進到下一結果,而在一系列結果的末尾是,則會引發StopIteration。

在for循環中,Python將自動調用工廠函數iter()獲得迭代器,自動調用next()獲取元素,還完成了檢查StopIteration異常的工作。

常用的幾個內建數據結構tuple、list、set、dict都支持迭代器,字符串也可以使用迭代操作。

你也可以自己實現一個迭代器,如上所述,只需要在類的__iter__方法中返回一個對象,這個對象擁有一個next()方法,這個方法能在恰當的時候拋出StopIteration異常即可。但是需要自己實現迭代器的時候不多,即使需要,使用生成器會更輕松。

[python] view plaincopy

#!/usr/bin/env python

# coding=utf-8

class test:

def __init__(self, input_list):

self.list = input_list

self.i = 0

def __iter__(self):

return self

def next(self):

if self.i == len(self.list):

self.i = 0

raise StopIteration

self.i += 1

return self.list[self.i - 1]

電腦技術網對《python批量處理圖片圖片Python迭代器和生成器介紹》總結來說,為我們學習編程很實用。

使用迭代器一個顯而易見的好處就是:每次只從對象中讀取一條數據,不會造成內存的過大開銷。

例如:

[python] view plaincopy

/* 把文件一次加載到內存中,然后逐行打印。當文件很大時,這個方法的內存開銷就很大了 */

for line in open("test.txt").readlines():

print line

/* 這是最簡單也是運行速度最快的寫法,他并沒顯式的讀取文件,而是利用迭代器每次讀取下一行 */

for line in open("test.txt"): #use file iterators

print line

生成器

生成器的編寫方法和函數定義類似,只是在return的地方改為yield。

生成器中可以有多個yield。當生成器遇到一個yield時,會暫停運行生成器,返回yield后面的值。當再次調用生成器的時候,會從剛才暫停的地方繼續運行,直到下一個yield。

生成器自身又構成一個迭代器,每次迭代時使用一個yield返回的值。

需要注意的是,生成器中不需要return語句,不需要指定返回值,在生成器中已經存在默認的返回語句

生成器表達式

[python] view plaincopy

(i for i in range(5))

// 返回迭代器

at 0x7ff3e8f0d960>

列表解析,返回list

[python] view plaincopy

[i for i in range(5)]

// 返回list

[0, 1, 2, 3, 4]

在這里存在一個問題,那就是range(5)會返回一個長度為5的數據,如果是range(1000)那么就會占用一個1000大小的數組空間;如果我們采用`生成器`,在需要的時候產生一個數字,那么空間的占用情況就會降低,這里我們可以使用xrange()函數來實現。

[python] view plaincopy

'''''

xrange

函數說明:用法與range完全相同,所不同的是生成的不是一個數組,而是一個生成器。

xrange示例:

'''

>>> xrange(5)

xrange(5)

>>> list(xrange(5))

[0, 1, 2, 3, 4]

>>> xrange(1,5)

xrange(1, 5)

>>> list(xrange(1,5))

[1, 2, 3, 4]

>>> xrange(0,6,2)

xrange(0, 6, 2)

>>> list(xrange(0,6,2))

[0, 2, 4]

所以xrange做循環的性能比range好,尤其是返回很大的時候,盡量用xrange吧,除非你是要返回一個列表。

總結

以上是生活随笔為你收集整理的python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。