1.迭代器:迭代的工具
什麼是迭代?
迭代是乙個重複的過程,並且每次重複都是基於上一次的結果而來
2.想要了解迭代器是什麼?必須先了解乙個概念,即什麼是可迭代物件?
可迭代物件:在python中,但凡內建有___iter___方法的物件,都是可迭代的物件
舉個列子:
str='hello'
list=[1,2,3]
tup=(1,2,3)
dic=
set=
f=open('a.txt','w',encoding='utf-8')
3.迭代器:迭代取值的工具,可迭代的物件執行__iter__方法得到的返回值就是迭代器的物件
舉兩個列子:
dic=
iter_dic=dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
(只能輸出三次,第四次報錯,值已經被取完了)
s1=iter_s1=s1.__iter__()
print(iter_s1.__.next__())
print(iter_s1.__.next__())
print(iter_s1.__.next__())
4.可迭代的物件對比迭代器物件?
可迭代物件:str list tuple dict set file
1.獲取可迭代物件的方式:無需獲取,python 內建 str list tuple dict set file都是可迭代器的物件
2.特點:
內建有__iter__方法的都叫可迭代的物件,執行該方法會拿到乙個迭代器物件
迭代器物件:檔案物件本身就是可迭代器物件
1.獲取迭代器對想的方式:
執行可迭代物件的__iter__方法,拿到的返回值就是迭代器物件
2.特點:
內建有__next__方法,執行該方法會拿到迭代器物件的乙個值
內建有__iter__方法,執行該方法會拿到迭代器本身
舉個列子:
# x='hello'# iter_x=x.__iter__()
# iter_x.__next__
# print(iter_x.__iter__()is iter_x)true迭代器物件執行__iter__方法得到的是迭代器本身
# print(iter_x)
# print(iter_x.__iter__())
檔案本身就是迭代器物件(f.__next__())
3.迭代器的優缺點分析:
3.1迭代器的優點:
提供了一種可不依賴於索引的取值方式
更加節省記憶體
3.2迭代器缺點:
取值麻煩,只能一次取乙個,只能往後取
並且是一次性的,無法用len獲取長度
4.for迴圈原理分析:
1️⃣for迴圈稱之為迭代器迴圈,in後跟的必須是可迭代的物件
2️⃣for迴圈會執行in後物件的__iter__方法,拿到迭代器物件
3️⃣然後呼叫迭代器物件的__next__方法,拿到乙個返回值賦值給line,執行一次迴圈體
4️⃣周而復始,直到取完為止,for迴圈會檢測到異常自動結束迴圈
l=open('a.txt','r',encoding='utf-8')
for line in l:
print(line)
for item in :
print(line)
二.生成器
函式內包含有yield的關鍵字
再呼叫函式,就不會執行函式體**,拿到的返回值就是乙個生成器物件
def chicken()
print('*****>first')
yield 1
print('*****>'sencond')
yield 2
obj=chicken()
print(obj)
生成器本質就是迭代器,也就是說生成器的玩法其實就是迭代器的玩法
print(obj.__iter__()is obj)
res=obj.__next__()
print(res)
1、iter_obj=obj.__iter__(),拿到迭代器
2、出發iter_obj.__next__(),拿到該方法的返回值,賦值給item
3、周而復始,直到函式內不在有yield,即取值完畢
4、for會檢測到stopiteration異常,結束迴圈
for item in obj:
print(item)
總結yield:
1、為我們提供了一種自定義迭代器的方式,
可以在函式內用yield關鍵字,呼叫函式拿到的結果就是乙個生成器,生成器就是迭代器
2、yield可以像return一樣用於返回值,區別是return只能返回一次值,而yield可返回多次
因為yield可以儲存函式執行的狀態
def my_range():
print('start........')
n=0while true:
yield n
n+=1
obj=my_range()
print(obj)
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())
for i in my_range():
print(i)
def my_range(start,stop,step=1):
n=start
while n < stop:
yield n #yield 4
n+=step #5
三.面向過程的程式設計思想
核心是『過程』二字,過程即解決問題的關鍵,即先幹什麼,再幹什麼
基於面向過程編寫程式就好比在設計一條流水線,是一種機械方式的思維方式
總結優缺點:
優點:複雜的問題流程化,進而簡單化
缺點:修改乙個階段,其他階段都有可能需要做出修改,牽一髮而動全身,即擴充套件性極差
應用:用於擴充套件性要求低的場景
第十一天 SQL Loader的使用
第十一章 sql loader的使用 1.sql loader簡介 2.sql loader的控制檔案 如何建立使用控制檔案,控制檔案的語法特徵 3.sql loader資料檔案 sql loader資料檔案的內容,不同格式資料檔案的應用 使用例項 cmdsqlldr 例如 準備乙個文字檔案 abc...
學習Python的第十一天
今天學習的內容是掌握異常處理 語法錯誤和異常。語法錯誤 python 的語法錯誤或者稱之為解析錯 這個例子中,函式 print 被檢查到有錯誤,是它前面缺少了乙個冒號 語法分析器指出了出錯的一行,並且在最先找到的錯誤的位置標記了乙個小小的箭頭。異常即便python程式的語法是正確的,在執行它的時候,...
學習springmvc的第十一天 刪除
1 在controller中編寫delete方法 2 在springmvc.xml使用mvc default servlet handler註解配置訪問靜態資源,同時配置mvc annotation driven防止原來的請求失效 3 在list.jsp新增刪除的請求,並將a標籤的href指向本頁面...