1. 程式人生 > >python學習第十三章

python學習第十三章

什麽 成了 pri del 內部 模式 獲取 ID 加工

今日主要內容:

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學習第十三章