匿名函數和常見是內置函數(配合匿名使用)和for迴圈的原理,異常的捕獲 匿名函數 常見的內置函數(配合匿名函數使用) 可迭代對象 迭代器對象 for迴圈內部原理 異常捕獲 匿名函數 匿名函數不需要顯示地定義函數名,使用【lambda + 參數 +表達式】的方式 lambda [arg1 [,arg2 ...
匿名函數和常見是內置函數(配合匿名使用)和for迴圈的原理,異常的捕獲
- 匿名函數
- 常見的內置函數(配合匿名函數使用)
- 可迭代對象
- 迭代器對象
- for迴圈內部原理
- 異常捕獲
匿名函數
匿名函數不需要顯示地定義函數名,使用【lambda + 參數 +表達式】的方式
lambda [arg1 [,arg2, ... argN]] : expression
常見的內置函數(配合匿名函數使用)
# map() 會根據提供的函數對指定序列做映射。
l1 = [1, 2, 3,4,5,6]
res=map(lambda a:a*2,l1)
print(list(res))
#zip() 函數用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的對象,這樣做的好處是節約了不少的記憶體。
利用 * 號操作符,可以將元組解壓為列表。
l1 = [1, 2, 3,4,5,6]
l2=[1,2,3,4,5,56,7]
res=zip(l1,l2)
print(list(res))
l1 = [1, 2, 3,4,5,6]
l2=[1,2,3,4,5,56,7]
res=zip(*zip(l1,l2))
print(list(res))
#max() 方法返回給定參數的最大值,參數可以為序列。
l1 = [1, 2, 3,4,5,6]
res=max(l1)
print(res)
d = {
'kevin': 1000,
'jerry': 30000,
'Tank': 200000,
'Oscar': 100
}
print(max(d,key=lambda x:d[x]))
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表
過濾出1~100中平方根是整數的數:
import math
def is_sqr(x):
return math.sqrt(x) % 1 == 0
newlist = filter(is_sqr, range(1, 101))
print(list(newlist))
可迭代對象
迭代:更新換代,每一次的更新都是基於上一次的結果
可迭代對象:
內置有__iter__方法的都可以稱之為是可迭代對象
'內置': 直接可以使用點出來的
"""
__iter__方法的讀法
後面會有_開頭的方法,這種方式也是有特殊含義的,大家最後先不要使用
"""
"""
可迭代對象:
str、list、dict、set、tuple、文件類型
以上基本數據類型都是可迭代對象
"""
'''可迭代對象調用__iter__方法之後就是迭代器對象了'''
__iter__開頭的方法都有一個與之對應的簡寫:iter(s) 方法名()
i = 123
f = 1.11
s = 'hello'
l = [1, 2, 3, 4]
t = (1, 2, 3, 4)
se = {1, 2, 3, 4}
d = {'a':1, 'b':2}
b = True
# i.__iter
# f.__ite
s.__iter__()
l.__iter__()
t.__iter__()
se.__iter__()
d.__iter__()
# b.__iter
file = open('a.txt', 'w')
file.__iter__()
'''可迭代對象調用__iter__方法之後就是迭代器對象了'''
print(s.__iter__()) # <str_iterator object at 0x0000023F68F31100>
print(iter(s))
def iter(s):
return s.__iter__()
print(len(s))
print(s.__len__())
def len(s):
return s.__len__()
"""
__iter__開頭的方法都有一個與之對應的簡寫:iter(s) 方法名()
"""
迭代器對象
迭代器:
內置有__iter__方法還內置有__next__方法
如何轉為迭代器對象
有可迭代對象調用__iter__()方法轉為迭代器對象
l = [1, 2, 3, 4]
print(l.__iter__().__next__()) # 1
print(l.__iter__().__next__()) # 1
print(l.__iter__().__next__()) # 1
print(l.__iter__().__next__()) # 1
res = l.__iter__()
print(res.__next__()) # 1
print(res.__next__()) # 2
print(res.__next__()) # 3
print(res.__next__()) # 4
for迴圈內部原理
for迴圈內部的原理:
1. 首先把關鍵字in後面的可迭代對象轉為迭代器對象
2. while迴圈取值__next__迭代取值,當next取值完畢的時候會報錯
3. 當內部報錯的時候,for迴圈進行了異常捕捉
異常捕獲
捕捉異常可以使用try/except語句。
try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。
如果你不想在異常發生時結束你的程式,只需在try里捕獲它。
try:
正常的操作
......................
except:
發生異常,執行這塊代碼
......................
else:
如果沒有異常執行這塊代碼
try:
正常的操作
......................
except(Exception1[,Exception2[,...ExceptionN]]):
發生以上多個異常中的一個,執行這塊代碼
......................
else:
如果沒有異常執行這塊代碼
try-finally 語句無論是否發生異常都將執行最後的代碼。
try:
fh = open("testfile", "w")
fh.write("這是一個測試文件,用於測試異常!!")
finally:
print( 沒有找到文件或讀取文件失敗")
'''
try:
正常的操作
......................
except ExceptionType, Argument:
你可以在這輸出 Argument 的值...
'''
l=[1,2,3,4,5]
res= l.__iter__()
while True:
try:
print(res.__next__())
except Exception:
break