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

歡迎訪問 生活随笔!

生活随笔

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

python

python平方数迭代器_Python三大神器之迭代器详解

發布時間:2025/3/12 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python平方数迭代器_Python三大神器之迭代器详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們將要來學習python的重要概念迭代和迭代器,通過簡單實用的例子如列表迭代器和xrange。

可迭代

一個對象,物理或者虛擬存儲的序列。list,tuple,strins,dicttionary,set以及生成器對象都是可迭代的,整型數是不可迭代的。如果你不確定哪個可迭代哪個不可以,你需要用python內建的iter()來幫忙。

>>> iter([1,2,3])

>>> iter({1:2, 2:4})

>>> iter(1234)

Traceback (most recent call last):

File "", line 1, in

iter(1234)

TypeError: 'int' object is not iterable

iter()為list返回了listiterator對象,為dictionary返回了dictionary-keyiterator對象。類似對其他可迭代類型也會返回迭代器對象。

iter()用在自定義的類型會怎樣呢?我們先自己定義一個String類:

class String(object):

def __init__(self, val):

self.val = val

def __str__(self):

return self.val

st = String('sample string')

那么,st是可迭代的嗎?

>>> iter(st)

TypeError: 'String' object is not iterable

你可能會有幾個問題要問:

怎么讓自定義的類型可迭代?

iter()究竟做了些什么?

讓我們補充String類來找找答案

class String(object):

def __init__(self, val):

self.val = val

def __str__(self):

return self.val

def __iter__(self):

print "This is __iter__ method of String class"

return iter(self.val) #self.val is python string so iter() will return it's iterator

>>> st = String('Sample String')

>>> iter(st)

This is __iter__ method of String class

在String類中需要一個’__iter__’方法把String類型變成可迭代的,這就是說’iter’內部調用了’iterable.__iter__()’

別急,不是只有增加’__iter()’方法這一種途徑

class String(object):

def __init__(self, val):

self.val = val

def __str__(self):

return self.val

def __getitem__(self, index):

return self.val[index]

>>> st = String('Sample String')

>>> iter(st)

‘itr’也會調用’iterable.__getitem__()’,所以我們用’__getitem__’方法讓String類型可迭代。

如果在String類中同時使用’__iter__()’和’__getitem__()’,就只有’__iter__’會起作用。

自動迭代

for循環會自動迭代

for x in iterable:

print x

我們可以不用for循環來實現嗎?

def iterate_while(iterable):

index = 0

while(i< len(iterable)):

print iterable[i]

i +=1

這樣做對list和string是管用的,但對dictionary不會奏效,所以這絕對不是python式的迭代,也肯定不能模擬for循環的功能。我們先看迭代器,等下回再過頭來。

迭代器

關于迭代器先說幾條………..

1. 迭代器對象在迭代過程中會會產生可迭代的值,`next()`或者`__next()__`是迭代器用來產生下一個值的方法。

2. 它會在迭代結束后發出StopIteration異常。

3. `iter()`函數返回迭代器對象

4. 如果`iter()`函數被用在迭代器對象,它會返回對象本身

我們試一試模仿for循環

def simulate_for_loop(iterable):

it = iter(iterable)

while(True):

try:

print next(it)

except StopIteration:

break

>>> simulate_for_loop([23,12,34,56])

23

12

34

56

前面我們看過了iterable類,我們知道iter會返回迭代器對象。

現在我們試著理解迭代器類的設計。

class Iterator:

def __init__(self, iterable)

self.iterable = iterable

.

.

def __iter__(self): #iter should return self if called on iterator

return self

def next(self): #Use __next__() in python 3.x

if condition: #it should raise StopIteration exception if no next element is left to return

raise StopIteration

我們學了夠多的迭代和迭代器,在python程序中不會用到比這更深的了。

但是為了學習的目的我們就到這兒。。。。

歡迎加入我的QQ群`923414804`與我一起學習,群里有我學習過程中整理的大量學習資料。加群即可免費獲取

列表迭代器

你可能會在面試中寫這個,所以打起精神來注意了

class list_iter(object):

def __init__(self, list_data):

self.list_data = list_data

self.index = 0

def __iter__(self):

return self

def next(self): #Use __next__ in python 3.x

if self.index < len(self.list_data):

val = self.list_data[self.index]

self.index += 1

return val

else:

raise StopIteration()

我們來用`list_iter`自己定義一個列表迭代器

class List(object):

def __init__(self, val):

self.val = val

def __iter__(self):

return list_iter(self.val)

>>> ls = List([1,2,34])

>>> it = iter(ls)

>>> next(it)

1

>>> next(it)

2

>>> next(it)

34

>>> next(it)

Traceback (most recent call last):

File "", line 1, in

next(it)

File "", line 13, in next

raise StopIteration()

StopIteration

xrange

從一個問題開始——xrange是迭代還是迭代器?

我們來看看

>>> x = xrange(10)

>>> type(x)

幾個關鍵點:

1. `iter(xrange(num))`應該被支持

2. 如果`iter(xrange(num))`返回同樣的對象(xrange類型)那xrange就是迭代器

3. 如果`iter(xrange(num))`返回一個迭代器對象那xrange就是迭代

>>> iter(xrange(10))

它返回了rangeiterator,所以我們完全可以叫它迭代器。

讓我們用最少的xrange函數實現自己的xrange

xrange_iterator

class xrange_iter(object):

def __init__(self, num):

self.num = num

self.start = 0

def __iter__(self):

return self

def next(self):

if self.start < self.num:

val = self.start

self.start += 1

return val

else:

raise StopIteration()

my xrange

class my_xrange(object):

def __init__(self, num):

self.num = num

def __iter__(self):

return xrange_iter(self.num)

>>> for x in my_xrange(10):

print x,

0 1 2 3 4 5 6 7 8 9

我喜歡在這里總結這篇文章,歡迎發表評論和疑問。

總結

以上是生活随笔為你收集整理的python平方数迭代器_Python三大神器之迭代器详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 最近中文字幕mv | 日本三级少妇 | 黄色精品视频在线观看 | 大陆极品少妇内射aaaaaa | 少妇在线播放 | 天天综合色网 | xxxx日本高清 | 黄色成人在线视频 | 欧洲一区二区在线观看 | 午夜精品一区二区三区在线视频 | 一区二区在线免费观看 | 永久免费精品视频 | 我会温柔一点的日剧 | 欧美一级久久 | 天天综合国产 | 国产一页 | 国产精品欧美一区喷水 | 国产精品看片 | 无码国产精品高潮久久99 | 手机看片福利一区 | 亚洲熟妇av一区二区三区漫画 | 色综合天天综合网天天狠天天 | 亚洲高清精品视频 | 亚洲成人一二三区 | 午夜av片 | 日韩图片一区 | 色婷综合| 久草视频在线播放 | 制服丝袜第二页 | 精品乱码久久久久久中文字幕 | 日本高清免费不卡视频 | 日本老小玩hd老少配 | 国产精品久久久久久久天堂 | 韩国无码av片在线观看网站 | 国产真实生活伦对白 | 性爱一级视频 | 精品国产97 | 五月六月丁香 | 国产欧美视频一区 | 国产精品1000部啪视频 | 青青青国内视频在线观看软件 | 又色又爽又黄gif动态图 | 久久精品色| 国产精品资源在线观看 | 男生女生搞黄色 | 高h在线观看 | 柠檬av导航| www.欧美视频| 日韩不卡的av | 精品国产91 | 色悠悠在线视频 | 精品视频在线免费观看 | 免费美女毛片 | 久av在线| 不卡福利视频 | 人人妻人人澡人人爽人人dvd | 色屁屁一区二区 | 欧美亚一区二区三区 | 天天摸日日操 | 自拍啪啪 | 欧美a免费 | 黑人巨大猛交丰满少妇 | jizz少妇 | 亚洲黄色小视频 | 亚洲成人播放 | 亚洲成在线观看 | 影音先锋欧美在线 | 国产午夜免费福利 | 夫妻性生活黄色大片 | 美女av免费在线观看 | 韩国精品在线观看 | 男女黄色又爽大片 | 欧美色欧美| 99久久99久久精品国产片果冰 | 色呦网站| 国产伦精品一区二区三区妓女下载 | 亚洲中文字幕无码av永久 | 日韩一区二区精品视频 | 日韩欧美国产三级 | 国产精品二区一区二区aⅴ污介绍 | av黄色在线| 9191国产精品 | 无码人妻精品一区二区三区66 | 国产1区在线| 久久国产一级片 | 台湾色综合 | 午夜影视体验区 | 国产一级特黄a高潮片 | 国产一区二区精品在线观看 | 成人网站在线进入爽爽爽 | 国内激情自拍 | 欧美一区二区高清视频 | 亚洲一区二区三区香蕉 | 爱情岛亚洲首页论坛小巨 | 午夜激情网 | 91最新入口 | 欧美电影一区二区三区 | 欧美性白人极品1819hd | 亚洲精品一区三区三区在线观看 |