生成器
概念:含有__iter__()和__next__()方法的被迭代器
生成器和迭代器差不多,都可以通過next和for迴圈取值
生成器的建立
生成器通過yield 關鍵字建立,含有yield的都是生成器
def
fun():
i=0while
true
:yield i
i +=
1
f=fun(
)next
(f)#0
next
(f)#1
說明
當每次呼叫next的時候,才去函式中取值,yield返回值,並'凍結'在yield,直到下一次呼叫next的時候才會重新執行。
作用
>>
>
deffun()
: i=
0while
true
: res=
yield i
print
(res)
i +=
1>>
> f=fun(
)>>
> f.send(10)
traceback (most recent call last)
: file ""
, line 1,in
f.send(10)
typeerror: can't send non-
none value to a just-started generator
>>
> f.send(
none)0
>>
> f.send(2)
21>>
> 用法:obj.send(引數)
往生成器裡面傳值,並被yield接收
注意:當第一次用send傳值的時候,只能傳入none,否則會報錯(第一次傳入的值並沒有被呼叫,但是不知道為啥會報錯)
typeerror: can't send non-
none value to a just-started generator
執行過程
生成器的每次傳值的時候,都是先傳入進行運算,在執行yield,也就是說,生成器先'凍結'在yield,等下次傳值的時候,傳入到接收的,執行下面的,直到再次碰到乙個yield的時候,終止
優點
生成器:適用於大量的資料
減少了記憶體的損耗
在模組最上面用三引號輸入的資訊,就是本文的說明文件,可以被以後匯入本模組的方法來檢視(模組名.__doc__)檢視本模組的說明,在函式上加說明文件也是一樣的,都是三引號。
dir() 檢視所有的函式和變數的方法
__file__ 檢視模組的路徑
簡介:
模組的匯入其實就是把模組的內容載入到記憶體中,然後賦值給乙個模組名相同的變數,這個變數擁有模組的全部變數和方法。
一:
import 模組名
模組名.函式(或變數)
二: from 模組名 import 函式
函式(只能用匯入的這個函式)
三: from 模組名 import
* (*代表匯入模組的全部變數和方法)
函式(變數)(可以用模組的所有變數和方法)
解釋一般情況下,不去應用第三種匯入,在python模組中,有的不需要被匯入,在想要用第三種匯入的時候,可以用
__all__=
往列表中新增你想要匯入的包
一堆.py檔案的封裝,在使用的時候,直接 包名.函式名 就可以使用
根據需求,可以自己封裝包
包下面都有乙個__init__.py的檔案,用於載入包的內建模組
__init__.py檔案,在匯入包的時候,預設執行,一般用來匯入包中的模組
from
.import 模組名
from
.模組名 import
*等等.
..
.代表當前目錄(其實感覺第乙個沒什麼用,實際測試也確實沒什麼用,可能知識還不夠)
對於我們平常的快捷操作,其實都是呼叫類裡面的預設函式
__repr__ 用於返回物件的資訊
__setattr__ 用於設定物件的資訊(obj.attri=』『)
__getattr__ 獲取物件的值(相當於obj.屬性)
__delattr__ 刪除物件 (
del obj)
__hasattr__ 判斷是還不是屬性或方法(
hasattr
(類,方法)
)__del__ 析構方法,自動呼叫,程式執行結束之前
迭代和生成器
列表迭代的本質 iter 函式返回乙個迭代器,然後可以呼叫迭代器上的next方法 arr 1,2,3,4,5 arr iterator arr.iter print arr iterator.next print next arr iterator 乙個典型的迭代器實現。例子來自 流暢的python...
15 迭代器 生成器 模組和包
第16節 迭代器 生成器 作業解答 一,推導表示式 1,列表推導 2,集合和字典推導 二,生成器 1,建立生成器的兩種方法 2,yield執行規則 三,迭代器 1,區分可迭代物件和迭代器 2,迭代 3,for實現原理 4,從可迭代物件生成乙個迭代器 5,自定義迭代器 四,模組 1,模組的匯入 2,匯...
Python迭代器生成器,模組和包
1.迭代器和生成器 2.模組和包 1.迭代器 迭代器物件要求支援迭代器協議的物件,在python中,支援迭代器協議就是實現物件的 iter 和 next 方法。其中 iter 方法返回迭代器物件本身 next 方法返回容器的下乙個元素,在結尾時引發stopiteration異常。2.生成器gener...