python語法筆記(二)

2022-04-28 16:12:08 字數 2966 閱讀 2086

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+ y

print 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...