成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Python] for循環(huán)是怎樣工作的?

myeveryheart / 1087人閱讀

摘要:我們把對(duì)象傳給內(nèi)置的方法,會(huì)返回一個(gè)迭代器,循環(huán)就是使用這個(gè)模式來(lái)實(shí)現(xiàn)適用于所有的對(duì)象。舉例當(dāng)?shù)髟贈(zèng)]有元素可以迭代時(shí)會(huì)引發(fā)一個(gè)異常。因此,對(duì)于你提的例子我們使用迭代器來(lái)重新定義一下。

如果你從迭代層面來(lái)理解的話可能對(duì)于for的工作原理會(huì)有更深的理解。
首先我們來(lái)使用dir查看一下對(duì)于range、str這兩個(gè)的不一樣的類型有什么共同點(diǎn)。

>>> dir(range)
["__class__", "__contains__", "__delattr__", "__dir__", "__doc__", "__eq__", "__format__",   
"__ge__", "__getattribute__", "__getitem__", "__gt__", "__hash__", "__init__", "__iter__",   
"__le__", "__len__", "__lt__", "__ne__", "__new__", "__reduce__", "__reduce_ex__",   
"__repr__", "__reversed__", "__setattr__", "__sizeof__", "__str__", "__subclasshook__",   
"count", "index", "start", "step", "stop"]  

>>> dir(str)
["__add__", "__class__", "__contains__", "__delattr__", "__dir__", "__doc__", "__eq__",   
"__format__", "__ge__", "__getattribute__", "__getitem__", "__getnewargs__", "__gt__",   
"__hash__", "__init__", "__iter__", "__le__", "__len__", "__lt__", "__mod__", "__mul__", 
"__ne__", "__new__", "__reduce__", "__reduce_ex__", "__repr__", "__rmod__", "__rmul__", 
"__setattr__", "__sizeof__", "__str__", "__subclasshook__", "capitalize", "casefold", 
"center", "count", "encode", "endswith", "expandtabs", "find", "format", "format_map",
 "index", "isalnum", "isalpha", "isdecimal", "isdigit", "isidentifier", "islower", 
"isnumeric", "isprintable", "isspace", "istitle", "isupper", "join", "ljust", "lower", 
"lstrip", "maketrans", "partition", "replace", "rfind", "rindex", "rjust", "rpartition", 
"rsplit", "rstrip", "split", "splitlines", "startswith", "strip", "swapcase", "title",
 "translate", "upper", "zfill"]

查看這兩個(gè)的共有屬性

>>> set(dir(range)) & set(dir(str))
{"__hash__", "__eq__", "__contains__", "__iter__", "__getitem__", "count", "__lt__", 
"__dir__", "__le__", "__subclasshook__", "__ge__", "__sizeof__", "__format__", "__len__", 
"__ne__", "__getattribute__", "__delattr__", "__reduce_ex__", "__gt__", "__reduce__", 
"__setattr__", "__doc__", "__class__", "__new__", "__repr__", "__init__", "index", "__str__"}

我們關(guān)注__iter__屬性,他們兩個(gè)都有這個(gè)函數(shù),如果你查看其他可以使用for循環(huán)迭代的對(duì)象,你都可以發(fā)現(xiàn)這個(gè)特殊方法。
實(shí)現(xiàn)了這個(gè)方法的對(duì)象我們稱之為iterable。
我們把對(duì)象傳給Python內(nèi)置的iter()方法,會(huì)返回一個(gè)迭代器,for循環(huán)就是使用這個(gè)模式來(lái)實(shí)現(xiàn)適用于所有的對(duì)象。
比如:

>>> iter([1, 2])

>>> iter(range(0, 10))

>>> iter("abc")

>>>
iter函數(shù)返回的對(duì)象我們稱之為iterator,iterator只需要做一件事,那就是調(diào)用next(iterator)方法,返回下一個(gè)元素。

舉例:

>>> t = iter("abc")
>>> next(t)
"a"
>>> next(t)
"b"
>>> next(t)
"c"
>>> next(t)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

當(dāng)?shù)髟贈(zèng)]有元素可以迭代時(shí)會(huì)引發(fā)一個(gè)異常。
那么在這里我給出itrable和iterator的定義。
iterable:
可以傳給iter并返回一個(gè)iteratot的對(duì)象
iterator:
可以傳給next函數(shù)并返回下一個(gè)迭代元素的對(duì)象,并在迭代結(jié)束引發(fā)一個(gè)異常。

因此,對(duì)于你提的例子我們使用迭代器來(lái)重新定義一下。

>>> t = iter(range(90, 0, -1))
>>> t

>>> next(t)
90
>>> next(t)
89
>>> next(t)
88

希望看完有所收獲。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38432.html

相關(guān)文章

  • 獨(dú)家 | 6種讓Python程序變慢壞習(xí)慣

    摘要:假設(shè)我們需要在程序中計(jì)算一些數(shù)字的平方根。此外如果我們需要在程序中多次使用平方根函數(shù),代碼將會(huì)更整潔。然而在這個(gè)虛構(gòu)的例子中,只有的年齡超過歲。然后檢查這三個(gè)人的年齡是否滿足第二個(gè)條件。 作者:?Christopher Tao翻譯:王可汗校對(duì):王雨桐本文約1800字,建議閱讀5分鐘本文...

    xcc3641 評(píng)論0 收藏0
  • 可迭代對(duì)象和迭代器

    摘要:對(duì)于迭代器來(lái)說,返回的是它自身,則是返回迭代器中的下一個(gè)值,如果沒有值了則拋出一個(gè)的異常。有一點(diǎn)繞,我們?cè)賮?lái)理一理迭代器和可迭代這兩個(gè)的差別一個(gè)迭代器一定是可迭代對(duì)象,因?yàn)樗欢ㄓ蟹椒?。而可迭代?duì)象的方法通常會(huì)生成一個(gè)新的迭代器對(duì)象。 for 循環(huán) 是我們?cè)?Python 里非常常用的一個(gè)語(yǔ)法,但你有沒有思考過 for 循環(huán)是怎樣實(shí)現(xiàn)的? 如果你以前接觸過 C++,應(yīng)該會(huì)知道類似 fo...

    Kaede 評(píng)論0 收藏0
  • python入門正確姿勢(shì),從一無(wú)所知到無(wú)所不知

    摘要:不同的人的路線圖版本會(huì)有所不同。尋找答案從一無(wú)所知到無(wú)所不知如果你在這個(gè)過程中多次遇到困難,在知難而退之前努力嘗試解決問題。并不是成為一個(gè)全面的開發(fā)人員所需要的唯一技能。首先進(jìn)行一兩個(gè)月的學(xué)習(xí)階段,然后進(jìn)入一個(gè)月的構(gòu)建階段。 初級(jí)開發(fā)者學(xué)Python容易陷入茫然,面對(duì)市面上種類眾多的編程語(yǔ)言和框架,重要的是堅(jiān)持自己的選擇,宜精不宜雜。本文是一篇指路文,概述了從編程基礎(chǔ)、引導(dǎo)、文檔閱讀、...

    legendmohe 評(píng)論0 收藏0
  • python入門正確姿勢(shì),要永遠(yuǎn)做個(gè)學(xué)習(xí)者,但不僅僅只做學(xué)習(xí)者!

    摘要:總之,要永遠(yuǎn)做個(gè)學(xué)習(xí)者,但不僅僅只做學(xué)習(xí)者了解并踐行學(xué)習(xí)實(shí)踐階段循環(huán)任何創(chuàng)造性學(xué)科的學(xué)習(xí)都可以分兩個(gè)階段,學(xué)習(xí)階段和構(gòu)建階段,彼此不斷重復(fù)。 初級(jí)開發(fā)者學(xué)Python容易陷入茫然,面對(duì)市面上種類眾多的編程語(yǔ)言和框架,重要的是堅(jiān)持自己的選擇,宜精不宜雜。本文是一篇指路文,概述了從編程基礎(chǔ)、引導(dǎo)、文檔閱讀、書籍和視頻、源代碼等學(xué)習(xí)和積累環(huán)節(jié),值得初學(xué)者參考。 作為一個(gè)開發(fā)者,為何要選擇Py...

    MarvinZhang 評(píng)論0 收藏0
  • [譯]Python面試中8個(gè)必考問題

    摘要:因此,當(dāng)任何由返回的函數(shù)被調(diào)用時(shí),的值將在附近的范圍進(jìn)行查找。下面是解決這一問題的一些方法。另外一個(gè)解決方案就是創(chuàng)造一個(gè)閉包,利用默認(rèn)函數(shù)立即綁定。當(dāng)缺失時(shí),執(zhí)行類,字典的實(shí)例將自動(dòng)實(shí)例化這個(gè)數(shù)列。 1、下面這段代碼的輸出結(jié)果是什么?請(qǐng)解釋。 def extendList(val, list=[]): list.append(val) return list list...

    warmcheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<