測試奇譚,BUG不見。
這一場,主講python的生成式和裝飾器。
目的:掌握四種生成式(列表、生成器、集合、字典),裝飾器的原理和使用。
生成式
01 什麼是生成式?
能夠用一行程式碼,快速高效的生成資料。(這就不需要再通俗的講解了吧)
02 列表生成式
舉個例子:提取1-100之間的奇數
# 不用列表生成式
odd_list = []
for i in range(101):
if i%2==1:
odd_list.append(i)
print(odd_list)
# 使用列表生成式(更加簡潔)
odd_list = [i for i in range(101) if i%2==1]
print(odd_list)
03 列表生成式
使用(),而不是 []
# 注意:這個不是生成tuple,而是生成器
odd_gen = (i for i in range(101) if i%2==1)
print(odd_gen)
-> <generator object <genexpr> at 0x00000206EEBFF750>
print(type(odd_gen))
-> <class 'generator'>
for i in odd_gen:
print(i)
04 集合生成式
舉個例子:列表元素去重
src_list = [1,1,1,2,2,3,4,5,5,6]
res_set = {i for i in src_list}
print(res_set)
-> {1, 2, 3, 4, 5, 6}
05 字典生成式
舉個例子:字典kv反轉
src_dict = {"zhangsan":20,"lisi":21, "wangwu":33, "zhaoliu":10}
rev_dict = {v:k for k,v in src_dict.items()}
print(src_dict)
-> {'zhangsan': 20, 'lisi': 21, 'wangwu': 33, 'zhaoliu': 10}
print(rev_dict)
-> {20: 'zhangsan', 21: 'lisi', 33: 'wangwu', 10: 'zhaoliu'}
裝飾器
裝飾器
01 什麼是裝飾器?
顧名思義:增強函式或類的功能的一個函式。
裝飾器的作用:增強函式的功能,確切的說,可以裝飾函式,也可以裝飾類。
初學的你,還是太難理解?
02 通俗的講解
你開視訊聊天,覺得自己的顏值不線上,於是乎,你使用美顏,增強裝飾自己的顏值。
對於美顏這個功能來說,你可以用,我可以用,所有人都可以用,以此來增強裝飾自己的顏值。
03 如何定義一個裝飾器
def decorator(func):
def wrapper(*args,**kargs):
# 可以自定義傳入的引數
print(func.__name__)
# 返回傳入的方法名引數的呼叫
return func(*args,**kargs)
# 返回內層函式函式名
return wrapper
04 如何使用一個裝飾器
方法一:不用語法糖@符號
# 裝飾器不傳入引數時
f = decorator(函式名)
# 裝飾器傳入引數時
f = (decorator(引數))(函式名)
方法二:採用語法糖@符號
# 定義的裝飾器
@decorator
def f():
pass
# 執行被裝飾過的函式
f()
再舉個例子:計算函式時間
import time
# 定義裝飾器
def time_calc(func):
def wrapper(args, kargs):
start_time = time.time()
f = func(args,kargs)
exec_time = time.time() - start_time
print(exec_time*1000)
return f
return wrapper
# 使用裝飾器
@time_calc
def add(a, b):
return a + b
@time_calc
def sub(a, b):
return a - b
add_result = add(1987190, 123423123123)
sub_result = sub(12341234, 123222)
一如既往,做個總結
01 生成式和裝飾器,是python高階程式設計的重要知識點;
02 工作中,使用他倆的頻率特別高。