迭代意味著重複多次,就像迴圈那樣。在python中只有支援迭代協議的物件才可以進行遍歷和迴圈。迭代協議支援__next__方法,用於指標式的讀取可迭代物件所包含的資訊。
常用的迭代工具有:for、推導、map。迭代又分為迭代器物件和可迭代物件。迭代器是已經實現__next__的物件(如檔案),而可迭代物件使用iter()用於生成迭代器,本身不支援__next__方法,但使用for迴圈時自動呼叫iter(),從而實現遍歷。
>>
>f=
open
('data.txt'
,encoding=
'utf8'
)>>
>
iter
(f) is f
true //檔案為迭代器物件
>>
>l=[1
,2,3
,4,5
]>>
>
iter
(l) is l
false //列表為可迭代物件
>>
>i=
iter
(l)>>
>i.
__next__()
//可以實現迭代器方法
1
為何使用迭代器而不是列表呢?列表只能一次性羅列所有值,當資料量較大時,我們只想逐個獲取值,而不是使用列表一次性獲取,列表可能會占用太多記憶體而導致演算法效率低。
正規的定義是:實現了方法__iter__的物件是可迭代的,而實現了方法__next__的物件是迭代器。
#推導的用法l=[
1,2,
3,4,
5]s='kdfjs'
res1=
[x for x in l]
res2=
[s1.
upper()
for s1 in s]
res3=
[s1 for s1 in s if s.
endwith
('s')]
#即第乙個s1為返回結果,for後面為遍歷過程,if後面為過濾條件
python中內建可迭代物件主要有range()、zip()、map()
>>
>r=
range(1
,6)//產生序列12345
>>
>
iter
(r) is r
false
>>
>result=
zip(
['x'
,'y'
,'z'],
[1,2
,3])
>>
>
for x in result:
print
(x)(
'x',1)
('y',2
)('z',3)
>>
>
iter
(result) is result
true
def double_number
(x):
return x*2l=
[1,2.3
.4.5
]result=
list
(map
(double_number
(l))
)print
(result)
#實現l中元素乘二
函式猶如小型程式,可以用來執行特定的操作。python提供了很多函式(如len()),用來完成不同的任務。此外,我們也可以自己定義函式。
定義函式方法:def 函式名(形式引數)
呼叫函式方法:函式(實參)
#利用定義函式方法求交集
def intersect
(seq1,seq2)
: res[
]for x in seq1:
if x in seq2:
res.()
return res
變數作用域:local => enclousure => global => built-in
python中引數傳遞依賴於資料型別是否可變。對於不可變型別,僅僅傳遞副本給函式,函式內的操作不影響原始值。對於可變型別,傳遞位址引用,函式內操作會影響原始值。
def change_number
(x):
x+=10
x=5print
('x={}'
.format
(x))
change_number
(x)print
('x={}'
.format
(x))
//整型為不可變型別
def change_list
(l):
l[0]
l=[1,
2,3]
print
(l)change_list
(l)print
(l)//列表為可變型別
Python 迭代和函式
問題 python中那些物件可以遍歷迴圈?支援迭代協議的物件可以遍歷迴圈,這種物件的特點是內建了 next 方法,該方法可移動指標到下乙個關聯物件。判斷是否內建next 方法,用iter an highlighted block list1 1 2,3 list1 iter list1 false ...
python迭代 Python迭代和生成
簡介在python中存在一種名叫迭代器的容器物件。顧名思義,這種物件能夠產生迭代的數值,在許多場合中,比如在機器學習領域,要從乙個迭代器裡不斷地提取樣本資料進行訓練。而生成器也是一種迭代器,因此在本文中將詳細介紹迭代器的知識。迭代器定義 迭代器也稱為游標,形象地理解為程式執行到 就在該處做個標記,下...
可迭代物件和迭代器以及偏函式(python)
一 在python中的可迭代物件 str list set tuple dict generator。二 迭代器 能夠被next呼叫,並且返回下乙個值的叫做迭代器 注意 迭代器一定是可迭代物件,但可迭代物件不一定是迭代器!上圖就是乙個迭代器 三 迭代器用到的模組以及其方法 模組 collection...