国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Python > 正文

Python for循環(huán)與getitem的關(guān)系詳解

2024-09-09 19:03:30
字體:
供稿:網(wǎng)友

這篇文章主要介紹了Python for循環(huán)與getitem的關(guān)系詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一個類里面如果由__iter__for循環(huán)就是找它取,沒有的話就會找__getitem__

前面一筆看過沒有留心具體的執(zhí)行情況。

In [169]: class Foo:   ...:   def __getitem__(self, pos):   ...:     print(pos)   ...:     return range(10)[pos]   ...:  
In [172]: for i in f:   ...:   ...   ...:      ...:                                             012345678910

從代碼可以看出,如果沒有報錯或者設(shè)置顯式的條件,這個for循環(huán)會無線循環(huán)。

我現(xiàn)在設(shè)置一個顯式的設(shè)置。

In [173]: class Foo:   ...:   def __getitem__(self, pos):   ...:     if pos >5:   ...:       raise StopIteration   ...:     print(pos)   ...:     return range(10)[pos]   ...: 
In [177]: for i in f:   ...:   ...   ...:                                             012345

將錯誤設(shè)置為IndexError也可以執(zhí)行,但TypeError就不行了。

   ...:   def __getitem__(self, pos):   ...:     if pos >5:   ...:       raise IndexError   ...:     print(pos)   ...:     return range(10)[pos]   ...:                                              In [182]:                                              In [182]: f = Foo()                                         In [183]: for i in f:   ...:   ...   ...:                                             012345

如果用list去運行這個參數(shù)會把返回的一個一個元素,裝入列表當中:

In [184]: list(f)                                         012345Out[184]: [0, 1, 2, 3, 4, 5]

只有__getitem__的類的實例是屬于可迭代對象,但用isinstances測試collections.Iterable是不能通過的,書后面介紹可以通過iter函數(shù)來測試,如果沒報錯就說明是可迭代對象,然后生成一個沒有__next__屬性的迭代器。

In [185]: from collections import Iterable                            In [186]: isinstance(f, Iterable)                                 Out[186]: False In [187]: iter(f)                                         Out[187]: <iterator at 0x114f2be50>
dir(f)                                         Out[189]:['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)之家。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 上思县| 克山县| 吴旗县| 仙居县| 河西区| 仁怀市| 苏尼特右旗| 博兴县| 巴塘县| 乐清市| 仲巴县| 宣化县| 商丘市| 聂拉木县| 镇宁| 静宁县| 久治县| 溧阳市| 甘南县| 临武县| 沛县| 博罗县| 英山县| 油尖旺区| 崇信县| 错那县| 盐池县| 芒康县| 台安县| 宜春市| 隆尧县| 米易县| 同德县| 德昌县| 青浦区| 哈巴河县| 南宁市| 深圳市| 南宁市| 小金县| 镇安县|