python學習第十三章

來源:互聯網
上載者:User

標籤:def   分類   字典推導式   代碼   next   匯入   range   構建   樣本   

今日主要內容:

1.迭代器和產生器補充,

2.產生器運算式和列表運算式.以及各種推導式

3.內建函數

1) 迭代器和產生器補充

1.查看一個對像是否是可迭代的,以及是否是迭代器.還可以通過匯入這兩個方法來實現

樣本:

from collections import Iterable  #匯入看是否可迭代的對像from collections import Iterator  #匯入查看是否是迭代器s = "123"f = isinstance(s,Iterable)print(f)f2 = isinstance(s,Iterator)print(f2)"""運行結果是TrueFalse"""

2.可迭代對像的特點是內部含有__iter__這個方法,迭代器特點是內部含有__iter__方法和__next__這個方法.

3.如下樣本:注意產生器是如何產生的.

def fun():    for i in range(10):        yield  igen= fun()  # 這裡的操作是產生一個產生器,注意,這裡是並不執行的.只是一個產生器.

4.產生器有兩種產生方法,一種是函數中帶有yield,即通過產生器函數來產生.一種是通過產生器運算式來產生.

5.可迭代對像變成迭代器的方法有如下兩種.

一種s.__iter__()這個就是產生了迭代器

一種是iter(對像)這個通過iter函數來實現

6迭代器的優點,主要有如下三個優點:

一.節省記憶體

二.惰性機制

三.單向無法復原

7.通過dir來查看一個可迭代對像是否是可迭代的,以及是否是產生器,

程式碼範例如下:

s ="123"print("__iter__" in  dir(s))print("__next__" in  dir(s))

 

2).產生器運算式和列表運算式.以及各種推導式

首先看一下列表運算式,樣本如下:

lst = ["校服%s" % i for i in range(10)]print(lst)

具體的格式如下:

 [變數(加工後的變數) for 變數 in iterable] 迴圈模式

列表推導式有兩種模式,一種是上面說的迴圈模式,一種是條件模式.

 分類:
 [變數(加工後的變數) for 變數 in iterable] 迴圈模式
 [變數(加工後的變數) for 變數 in iterable if 條件] 篩選模式

下面是範例程式碼:

#10以內所有數的平方lst = [i**2 for i in range(11)]print(lst)#30以內所有能被3整除的數的平方lst1 = [i*i for i in range(1,31) if i % 3 == 0 ]print(lst1)#100 以內所有的奇數.lst2 = [i for i in range(100) if i % 2 == 1]print(lst2)

產生器就是把[]換成()列表運算式就變成了,產生器運算式.

如上面的代碼換成產生器,並且表現出來,如下:

#10以內所有數的平方gen = (i**2 for i in range(11))  #產生一個產生器print(gen.__next__())#30以內所有能被3整除的數的平方  #gen1 = (i*i for i in range(1,31) if i % 3 == 0 )    #產生一個產生器print(gen1.__next__())#100 以內所有的奇數.gen2 = (i for i in range(100) if i % 2 == 1)   #產生一個產生器print(gen2.__next__())#v如果想全部取出來的話,可以用forfor i in gen2:    print(i)

為什麼有產生器:
 產生器本身是自己用python代碼構建的,這樣就滿足了個人化需求,滿足以後你工作中需要.

下面有一個樣本題:

 names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],[‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]

擷取上面列表中的名字裡面有兩個e的,放在新的列表中.

範例程式碼:

names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],[‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]lst = [name for i in names for name in i if name.count("e") ==2]print(lst)

各種推導式:

字典推導式:

 

python學習第十三章

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.