python學習第十三章
今日主要內容:
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) """ 運行結果是 True False"""
2.可叠代對像的特點是內部含有__iter__這個方法,叠代器特點是內部含有__iter__方法和__next__這個方法.
3.如下示例:註意生成器是如何生成的.
def fun(): for i in range(10): yield i gen= 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如果想全部取出來的話,可以用for for 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學習第十三章