1. 迴圈物件
迴圈物件是一類特殊的物件,它包含乙個next()方法(在python3中是 __next__()方法),該方法的目的是進行到下乙個結果,而在結束一系列結果之後,舉出 stopiteration錯誤。
當乙個迴圈結構(比如for)呼叫迴圈物件的時候,它就會每次迴圈的時候呼叫 next()方法,直到 stopiteration出現,for迴圈接收到 stopiteration,就知道迴圈結束,停止呼叫next().比如:
f = open('1.txt')f.next()
f.next()
...open()實際返回乙個迴圈物件,不斷輸入 f.next(),直到遇到 stopiteration
以上使用next()方法手動迴圈物件,可以自動的進行:
for lin in open('1.txt')
print line
for迴圈結構自動呼叫 next()方法,將該方法的返回值賦予給line。迴圈知道出現 stopiteration的時候結束。
相對於序列,使用迴圈物件的好處在於:不用在迴圈還沒開始的時候,就生成好要使用的元素。所使用元素
可以在迴圈的過程中逐漸生成,類似 迭代器。
2. 迭代器
從技術上來說,迴圈物件和for迴圈呼叫之間還有乙個中間層,就是要將迴圈物件轉換成迭代器。這一轉換是通過iter()函式實現的,在邏輯層面上常常忽略這一點,所以迴圈獨享和迭代器常常相互指代。
3.生成器
生成器可以構造乙個使用者自定義的迴圈物件。生成器的編寫方法和函式定義類似,只是在return的地方改為 yield。生成器中可以有多個yield,當生成器遇到乙個yield時,會暫停執行生成器,返回yield後面的值。當再次呼叫生成器的時候,會從剛才暫停的地方繼續執行,直到下一次yield。生成器自身構成乙個迴圈器,每次迴圈使用乙個yield返回的值。
def gen():a = 100
yield a
a = a*8
yield a
yield 1000
for i in gen():
print i
def gen():
for i in range(4):
yield i
或者可以寫成生成器表示式
g = (x for x in range(4))
4.表推導
表推導是快速生成表的方法,它的語法簡單,很有實用價值。
假設我們生成表l:
l =for x in range(10):
使用表推導表示式可以很方便的寫為:
l = [x**2 for x in range(10) ]
這和生成器表示式類似,只不過使用的是中括號。
注意生成器表示式和表推導的區別,圓括號 vs 中括號:
#生成器表示式g = (x for x in range(4))
#表推導
l = [x**2 for x in range(10)]
5. lambda函式
func = lambda x, y: x+ yprint func(3,4)
lambda 函式是一種匿名函式,可以在**中封裝一些常用的操作**,而不需要顯式的定義函式。
6. 函式作為引數傳遞
函式可以作為乙個物件,進行引數傳遞。函式名即為該物件,比如說:
def test(f, a, b):print 'test'
f(a, b)
test(func, 3, 4)
#func為乙個函式,作為乙個引數,傳遞給函式test
也可以將乙個lambda表示式作為引數傳遞給函式:
test((lambda x, y: x**2 + y), 6, 9)
7. map函式
map()是python的內建函式,它的第乙個引數是乙個函式物件。
re = map((lambda x:x + 3), [1,3,4,5])
這裡引數1為lambda定義的函式物件,引數2為乙個包含多個元素的表。map()的功能是將函式物件依次作用於表的每乙個元素,每次作用的結果儲存於返回的表re中。map是通過讀入的函式來運算元據。
如果作為引數的函式物件有多個引數,可以使用下面的方式,向map()傳遞函式引數的多個引數:
re = map((lambda x, y: x + y), [1,2,3], [6,7,8])
map()將每次從兩個表中分別取出乙個元素,帶入lambda所定義的函式。
在python3中,map()返回值不是乙個表,而是乙個迴圈物件。
8. filter函式
filter()和map()類似,將作為引數的函式物件作用於多個元素。如果函式物件返回的為true,則該次的元素被儲存於返回的表中。filter通過讀入的函式來篩選資料。在python3中,filter返回的不是表,而是迴圈物件。
def func(a):if a > 100:
return true
else:
return false
print fileter(func, [10, 56, 101, 100])
9. reduce函式
reduce函式的第乙個引數也是函式物件,但是該函式自身能接受兩個引數。reduce可以累進的將函式作用於各個引數。如:
print reduce((lambda x, y: x + y), [1,2,3,4])
第乙個引數為lambda表示式,接受兩個引數x,y,返回x+y
reduce將表中的前兩個元素1,2傳遞給lambda函式,得到3。該返回值3將作為lambda函式的第乙個引數,而表中得下乙個元素3作為lambda函式的第二個引數,進行下一次對lambda函式的呼叫,得到6,最後得到10.直到表中沒有剩餘的元素。
參考:
(二)Python入門筆記(語法 變數)
沒想到python是這個樣子。一 語法 python 使用縮進來指示 塊,且相同 塊中的空格數量相同 注釋以 開頭,python 將其餘部分作為注釋呈現,也可以用來阻止 執行 多行注釋用三引號 this is a comment.this is a comment.if5 2 print five ...
Python 語法筆記
2.python中堆的用法 3.python 中的基本語法 4.python 中字串的處理 5.python的類和物件 6.python 的字典 7.python 的list 列表 8.鍊錶 9.python中json資料 10.python 中的基本函式 11.python中的tqdm進度條模組 ...
Python 語法筆記
1 else與while結合 while a 0 pass else pass 當a 0時執行 2 with語法,無需關閉檔案,python自動關閉 with open a.txt r as f for s in f print s 3 抓異常 try except 異常 as s s為異常資訊 f...