日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Python基础学习(第7天)

發布時間:2023/12/13 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 Python基础学习(第7天) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第6課

1、循環對象:包括一個next方法,這個方法的目的是進行到下一個結果,結束后拋出StopInteration異常;

當循環結構如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后面的值

下面是一個生成器:
def gen():
    a = 100
    yield a
    a = a*8
    yield a
    yield 1000
#該生成器有3個yield,用作循環器時,會進行3輪循環
for i in gen():
    print i
1 def gen():
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):
    L.append(i**2)

還有更簡單的方法,即:表推導的方法

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+y
2 print func(3,4)
3 
4 等價于
5 def func(x,y):
6     return x+y
7 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])
print re

def func(x,y):
    return x**2,y**2
re = map(func,[1,2,3,4],[2,3,4,5])
print re

輸出:
[4,5,6]
[(1,4),(4,9),(9,16),(16,25)]

4、filter函數:第一個參數也是函數對象,將函數對象作用于后面數列的每一個元素,如果函數對象返回的是True,則該次的元素儲存于返回的數列中,filter函數通過函數對象來篩選數據(同理在Python3.x中 filter返回的不是list,還是循環對象),如下例子所示:

1 def func (x):
2     if x>100:
3         return True
4     else:
5         return False
6 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 = 2
2 n = 5
3 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包里面,需要引入包。

總結

以上是生活随笔為你收集整理的Python基础学习(第7天)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。