迭代器相關、for迴圈原理和異常處理
阿新 • • 發佈:2022-03-23
目錄
迭代器相關
可迭代物件
一、什麼是迭代?
迭代其實就是更新換代,每一次迭代的過程都是依據上一次的結果
eg:軟體的更新其實就是版本的迭代
# 單純的迴圈
import time
while True:
time.sleep(1)
print('qaq')
# 迭代
count = 0
while count < 8:
print(count)
count += 1
# 迭代取值
t1 = (12, 55, 88, 66, 74, 25, 31, 49)
count = 0
while count < len(t1):
print(t1[count])
count += 1
二、什麼是可迭代物件?
內建有__iter__方法的都可以稱之為可迭代物件
三、哪些資料是可迭代物件?
num = 8 # 沒有
f = 8.8 # 沒有
str1 = 'python' # 有
l1 = [111, 222, 333, 444] # 有
dic1 = {'name': 'johnson', 'age': 24} # 有
s = {1, 2, 3, 4, 5, 6} # 有
t = (1, 2, 3, 4, 5, 6) # 有
b = False # 沒有
str1.__iter__()
l1.__iter__()
dic1.__iter__()
s.__iter__()
t.__iter__()
迭代器物件
一、什麼是迭代器物件?
可迭代物件呼叫__iter__方法之後生成的結果就是迭代器物件
二、迭代器物件的特徵
同時含有__iter__方法和__next__方法
三、迭代器物件的作用
迭代器物件能夠極大的節省儲存空間
四、迭代器物件如何取值
呼叫__next__方法,如果取不到值則會直接報錯
五、迭代器物件補充說明
- 一些雙下方法具有簡便寫法
"""
__方法名__ 等價 方法名()
迭代器最常用的
__iter__ iter()
__next__ next()
"""
s = 'johnson'
print(s.__iter__()) # <str_iterator object at 0x000002B1D1AFA390>
print(iter(s)) # <str_iterator object at 0x000002B1D1AFA390>
print(s.__iter__().__next__()) # j
print(s.__len__()) # 7
print(len(s)) # 7
三、可迭代物件呼叫一次__iter__方法變為迭代器物件,繼續呼叫多次的結果還是迭代器物件本身
s = 'johnson'
res1 = s.__iter__()
res2 = s.__iter__().__iter__().__iter__()
print(res1, res2) # <str_iterator object at 0x0000019C2BC2A390> <str_iterator object at 0x0000019C2BC2A320>
四、迭代取值的要求
s = 'johnson'
print(s.__iter__().__next__()) # j 每次先產生一個新的迭代器物件然後取值
print(s.__iter__().__next__()) # j 每次先產生一個新的迭代器物件然後取值
res = s.__iter__() # 已經變為迭代器物件
print(res.__iter__().__next__()) # j 之後再呼叫多次仍是最初的的迭代器物件
print(res.__iter__().__next__()) # o 之後再呼叫多次仍是最初的的迭代器物件
print(res.__iter__().__next__()) # h 之後再呼叫多次仍是最初的的迭代器物件
print(res.__iter__().__next__()) # n 之後再呼叫多次仍是最初的的迭代器物件
print(res.__iter__().__next__()) # s 之後再呼叫多次仍是最初的的迭代器物件
print(res.__iter__().__next__()) # o 之後再呼叫多次仍是最初的的迭代器物件
print(res.__iter__().__next__()) # n 之後再呼叫多次仍是最初的的迭代器物件
for迴圈內部原理和本質
for迴圈內部原理
t1 = (111, 222, 333, 444, 555, 666, 777,)
'''需求:不依賴於for迴圈,完成對列表元素的取值'''
res = t1.__iter__()
count = 0
while count < len(t1):
print(res.__next__())
count += 1
"""
for迴圈底層原理
for 變數名 in 可迭代物件:
迴圈體程式碼
1.會將in後面的資料集呼叫__iter__()變成迭代器物件
2.針對產生的迭代器物件依次呼叫__next__()方法迭代取值
3.當值取完之後,自動處理報錯並退出迴圈
"""
for迴圈本質
# 利用while與異常處理,實現for迴圈的功能
data_info = {'name': 'boris', 'age': 55, 'nationality': 'UK'}
# 1.先轉換為迭代器物件
res = data_info.__iter__()
# 2.迭代取值
while True:
try:
print(res.__next__())
except StopIteration as e:
break
異常處理
一、什麼是異常?
程式碼執行出錯就是異常,異常會導致程式立刻停止。外號是bug,在程式設計過程中需要極力避免出現
二、異常資訊的組成部分
# input(>>>:)
# File "D:/PyCharm 2021/week4/day16/04.異常處理.py", line 5
# input(>>>:)
# ^
# SyntaxError: invalid syntax
# 1.line關鍵字所在的一行
# 提示你程式碼異常的位置,點選前面的藍色字型可以定位到該位置
# 2.SyntaxError錯誤的型別
# 程式碼的報錯分為很多型別,SyntaxError只是常見的一種
# 3.invalid syntax
# 具體的報錯原因,也是我們解決報錯的依據
三、異常的分類
# 1.語法異常
# 儘量不要出現,如果出現了必須立刻改正
# eg:簡單的if分支和while迴圈語法報錯
# 2.邏輯異常
# 可以偶爾出現,如果出現了儘快修改即可
# eg:程式碼動態獲取到了一個列表型別的變數名呼叫了字典的內建方法(屬性)
l1 = [1, 2, 3, 4, 5, 6, 7]
l1.keys() # AttributeError: 'list' object has no attribute 'keys'