Python for迴圈是怎樣工作的

2021-09-17 02:22:17 字數 2606 閱讀 6343

如果你從迭代層面來理解的話可能對於for的工作原理會有更深的理解。

首先我們來使用dir檢視一下對於range、str這兩個的不一樣的型別有什麼共同點。

>>> 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']

檢視這兩個的共有屬性

>>> set(dir(range)) & set(dir(str))

我們關注__iter__屬性,他們兩個都有這個函式,如果你檢視其他可以使用for迴圈迭代的物件,你都可以發現這個特殊方法。

實現了這個方法的物件我們稱之為iterable。

我們把物件傳給python內建的iter()方法,會返回乙個迭代器,for迴圈就是使用這個模式來實現適用於所有的物件。

比如:

>>> iter([1, 2])

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

>>> iter("abc")

>>>

iter函式返回的物件我們稱之為iterator,iterator只需要做一件事,那就是呼叫next(iterator)方法,返回下乙個元素。

舉例:

>>> t = iter("abc")

>>> next(t)

'a'>>> next(t)

'b'>>> next(t)

'c'>>> next(t)

traceback (most recent call last):

file "", line 1, in stopiteration

當迭代器再沒有元素可以迭代時會引發乙個異常。

那麼在這裡我給出itrable和iterator的定義。

iterable:

可以傳給iter並返回乙個iteratot的物件

iterator:

可以傳給next函式並返回下乙個迭代元素的物件,並在迭代結束引發乙個異常。

因此,對於你提的例子我們使用迭代器來重新定義一下。

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

>>> t

>>> next(t)

90>>> next(t)

89>>> next(t)

88

希望看完有所收穫。

pythonfor迴圈教程 for迴圈

for迴圈 它能夠迭代任何序列的項,例如列表或字串。語法 syntax for iterating var in sequence statements s 如果序列包含表示式列表,則首先對其進行求值。然後,將序列中的第一項分配給迭代變數iterating var 接下來,執行語句塊。列表中的每個專...

Python for 迴圈語句

python for迴圈可以遍歷任何序列的專案,如乙個列表或者乙個字串。語法 for迴圈的語法格式如下 for iterating var insequence statements s 流程圖 例項 usr bin python coding utf 8 forletterin python 第乙...

PYTHON for迴圈練習

1.使用者登陸程式需求 1.輸入使用者名稱和密碼 2.判斷使用者名稱和密碼是否正確?name root passwd westos 3.為了防止暴力破解,登陸僅有三次機會,如果超過三次機會,報錯提示 for i in range 3 name raw input 使用者名稱 passwd raw i...