第16節 迭代器、生成器
作業解答
一, 推導表示式
1,列表推導
2,集合和字典推導
二,生成器
1,建立生成器的兩種方法
2, yield執行規則
三,迭代器
1,區分可迭代物件和迭代器
2,迭代
3,for實現原理
4,從可迭代物件生成乙個迭代器
5,自定義迭代器
四,模組
1,模組的匯入
2,匯入語法 與 匯入路徑
導包匯入全部包 *
importosifnot os.path.exists('
my_tesr.txt
'): #
判斷檔案是否存在
file = open('
my_test.txt
', '
w+', encoding='
utf-8')
try:
my_dict =
file.write(my_dict[
'name'])
except
exception as e:
(e)
finally
: file.close()
print('
檔案正常關閉')
#檔案存在則不會執行try
1,列表推導
2,集合和字典推導
1,建立生成器的兩種方法
2, yield執行規則
python使用生成器對延遲操作提供了支援。所謂延遲操作,是指在需要的時候才產生結果,而不是立即產生結果,從而節省大量的空間,這也是生成器的主要好處
1,區分可迭代物件和迭代器
2,迭代
for 迭代變數 in 可迭代物件,每一次迴圈都會自動讓「迭代變數」指向「下乙個元素」 。
#例1li = [1,2,3,4,5]
for i in
li:
(i)#
例2li = [1,2,3,4,5]
index =0
var =none
while index var =li[index]
(var)
index += 1兩次列印結果都一樣:12
345
3,for實現原理
li = [1,2,3,4,5]li2 =iter(li)
try:
while
true:
var =next(li2)
(var)
except
stopiteration:
pass
列印結果:12
345
4,從可迭代物件生成乙個迭代器
迭代器 = iter(可迭代物件)
下個值 = next(迭代器)
5,自定義迭代器
迭代器物件本身需要支援以下兩種方法,它們一起構成迭代器協議:
iterator.__iter__()iterator.
__next__()
取值:
next(iterator)iterator.
__next__()
注意:如果迭代器值取完之後,會返回stopiteration 錯誤
1,模組的匯入
2,匯入語法 與 匯入路徑
3,if __name__== '__main__'
1,包概念:
把很多模組放到乙個資料夾裡面,就可以形成乙個包
importtest.zcm
test.zcm.func1()
import test.zcm as t #
test是資料夾,zcm是py檔案
t.func1()
from test import
zcmzcm.func1()
from test import
zcm as t
t.func1()
__all__ = ['zcm'] #
這句**必須要寫到init裡面
from test import *zcm.func1()
匯入包方法:
#例子1#
在包裡面的 __init__檔案裡定義函式方法
definitfunc():
print('
這是initfunc
')
#例子1import pp #
pp是包資料夾的名字
pp.initfunc()
列印結果:
這是initfunc
#例子2#
在包裡面的 __init__檔案裡定義函式方法
__all__ = ['
initfunc']
definitfunc():
print('
這是initfunc
')
#例子2form pp import *initfunc()
列印結果:
這是initfunc
2,包管理:
當把很多模組放在檔案中時,為了方便引用包中的模組,引入了包管理
3,__init__.py
在包管理中,加入此模組,則包名可以直接通過屬性訪問的方式,訪問此模組內的物件,檔案內容可以為空
4,相對路徑匯入
在包管理中,可以通過. (乙個點) 和 .. (兩個點)分別來匯入同層和上一層的模組
Python迭代器生成器,模組和包
1.迭代器和生成器 2.模組和包 1.迭代器 迭代器物件要求支援迭代器協議的物件,在python中,支援迭代器協議就是實現物件的 iter 和 next 方法。其中 iter 方法返回迭代器物件本身 next 方法返回容器的下乙個元素,在結尾時引發stopiteration異常。2.生成器gener...
閉包,生成器,迭代器
函式內部再定義乙個函式並且這個函式用到了外邊的函式的變數,那麼將這個函式以及用到的一些變數稱為閉包。def line conf a,b def line x return a x b return line line1 line conf 1,1 line2 line conf 4,5 print ...
生成器和迭代器
可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...