第十一天 迭代器,生成器,面向過程的程式設計

2022-08-03 17:12:16 字數 3136 閱讀 7357

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指向本頁面...