第6課
當迴圈結構如for迴圈呼叫乙個迴圈物件時,每次迴圈的時候都會呼叫next方法,知道最後丟擲stopinteration異常,迴圈結構知道結束,停止呼叫next方法。
如:1 #text.txt內容為
2 123
3 123
4 123
5 for line in open('text.txt'):6 print line
open方法返回的是乙個迴圈物件,包含next方法,for迴圈自動呼叫next方法,直至出現stopinteration異常。
用迴圈物件的好處在於:不用在迴圈還沒有開始的時候,就生成好要使用的元素。所使用的元素可以在迴圈過程中逐次生成。這樣,節省了空間,提高了效率,程式設計更靈活。
2、迭代器:
從技術上來說,迴圈物件和for迴圈呼叫之間還有乙個中間層,就是要將迴圈物件轉換成迭代器(iterator)。這一轉換是通過使用iter()函式實現的。但從邏輯層面上,常常可以忽略這一層,所以迴圈物件和迭代器常常相互指代對方。
3、生成器:
構造乙個使用者自定義的迴圈物件
1)生成器的定義方法和函式定義類似,只是在return的地方換成yield;
2)生成器中可以有多個yield,當生成器遇到乙個yield,會暫停執行生成器,返回yield後面的值;當再一次呼叫生成器時,會從剛才的地方繼續執行,直到遇到下乙個yield;
3)生成器本身是乙個迴圈器,每次迴圈返回乙個yield後面的值
下面是乙個生成器:defgen():
a= 100
yielda
a= a*8
yieldayield 1000
#該生成器有3個yield,用作迴圈器時,會進行3輪迴圈
for i ingen():print i
1 defgen():2 for i in range(4):3 yield i
這段**還可以寫成生成器表示式(generator expression):g = (x for x in range(4));生成器表示式是生成器的一種簡單編寫方式
4、表推導(list comprehension):是快速生成表(list)的方法。
假如要生成表:
l =for i in range(4):
還有更簡單的方法,即:表推導的方法
1 l = [x**2 for i in range(4)]
練習題:
1 x1 = [1,3,5]2 y1 = [9,12,13]3 l = [x**2 for (x,y) in zip(x1,y1) if(y)>10]
l = [9,25]
view code
第7課:函式物件
函式(function)也是乙個物件,函式也有屬性和方法,不僅可以賦值給其它物件名,還可以作為引數傳遞。
1、lambda函式:定義1個函式
1 func = lambda x,y:x+y2 print func(3,4)3
4 等價於5 deffunc(x,y):6 return x+y7 print func(3,4)
lambda生成1個函式物件,引數為x,y,返回值為x+y,函式物件的值賦給func
2、函式作為引數傳遞
函式可以作為物件,進行引數傳遞,函式名即為物件:
def test(f,a,b):
print 'test'
print f(a,b)
func = lambda x,y:x+y
test(func,1,2)
test函式的第乙個引數就是乙個函式物件,將func賦值給f,也可以這樣寫:test((lambda x,y:x+y),1,2)
3、map函式:格式:map( func, seq1[, seq2...] ),是python的內建函式,第乙個引數是乙個函式物件,第
二、第三個。。。是數列。
map函式的作用是:將函式物件作用於後面的數列的每乙個元素,將每次作用的結果儲存在數列中(在python 3.x中,map()的返回值是乙個迴圈物件。可以利用list()函式,將該迴圈物件轉換成表。)
如下:re = map((lambda x:x+3),[1,2,3])printredeffunc(x,y):return x**2,y**2re= map(func,[1,2,3,4],[2,3,4,5])printre
輸出:[4,5,6]
[(1,4),(4,9),(9,16),(16,25)]
4、filter函式:第乙個引數也是函式物件,將函式物件作用於後面數列的每乙個元素,如果函式物件返回的是true,則該次的元素儲存於返回的數列中,filter函式通過函式物件來篩選資料(同理在python3.x中 filter返回的不是list,還是迴圈物件),如下例子所示:
1 deffunc (x):2 if x>100:3 returntrue4 else:5 returnfalse6 ru = filter(func,[100,104,99,101,123])7 輸出:8 [104, 101, 123]
ps:filter函式最多2個引數,1個函式物件,1個數列,不像map函式可以有多個數列引數。
5、reduce函式:格式:reduce( func, seq[, init] ),第乙個引數也是函式物件,且要求它能接受2個引數,然後每次迭代,將上一次的迭代結果(第一次時為init的元素,如沒有init則為seq的第乙個元素)與下乙個元素一同執行乙個二元的func函式。在reduce函式中,init是可選的,如果使用,則作為第一次迭代的第乙個元素使用。返回多次迭代後的結果,如下例子所示:
1 m = 22 n = 53 print reduce(lambda x,y:x*y,range(1,n+1)) #120
4 print reduce(lambda x,y:x*y,range(1,n+1),m) #240 相當於((((2*1)*2)*3)*4)*5,2為init元素
ps:reduce()函式在3.0裡面不能直接用的,它被定義在了functools包裡面,需要引入包。
36歲自學python Python語言基礎
python 簡介 python是一種開源的 解析性的,物件導向的程式語言。python使用一種優雅的語法,可讀性強 python支援類和多層繼承等的物件導向程式設計技術。python可執行在多種計算機平台和作業系統中,如各位unix,windows,macos,os 2等等 使用python 安裝...
若干種茄子的做法
手撕茄子的做法 材料 長茄子若干個 調料 芝麻醬 生抽 醋 糖 鹽 雞精 蒜汁 喜歡吃辣的就放點紅油和炸辣椒 原料 茄子2條 肉末50克 豆瓣醬 生粉 油 鹽 生抽 蒜 蔥花 做法 1 茄子去皮 切成7厘公尺長 2厘公尺見方的條。用乙個雞蛋和少許澱粉拌勻,讓茄子上薄薄的裹一層粉,這樣省油也免得太油膩...
python python環境配置
python 3 教程 國內源 清華 https 阿里雲 http 中國科技大學 https 華中理工大學 http 山東理工大學 http 豆瓣 http 公升級 pip 到最新的版本 10.0 0 後進行配置 安裝django pip install django或 命令 yum install...