python極簡教程06:生成式和裝飾器

測試奇譚 發表於 2022-01-14
Python

測試奇譚,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 工作中,使用他倆的頻率特別高。