Day17 無參裝飾器

2022-09-09 02:24:11 字數 3565 閱讀 4251

一、無參裝飾器

1、什麼是裝飾器

器指的是工具,可以定義成成函式,裝飾指的是為其他事物新增額外的東西點綴

合到一起的解釋:

裝飾器指的定義乙個函式,該函式是用來為其他函式新增額外的功能

2、為何要用裝飾器

開放封閉原則

開放:指的是對拓展功能是開放的

封閉:指的是對修改源**是封閉的

裝飾器就是在不修改被裝飾器物件源**以及呼叫方式的前提下為被裝飾物件新增新功能

3、如何用

# def index(x,y):

# time.sleep(3)

# print('index %s %s' %(x,y))

## index(111,222)

# # index(y=111,x=222)

# # index(111,y=222)

# 需求:在不修改index函式的源**以及呼叫方式的前提下為其新增統計執行時間的功能

# 解決方案一:失敗

# 問題:沒有修改被裝飾物件的呼叫方式,但是修改了其源**

# import time

## def index(x,y):

# start=time.time()

# time.sleep(3)

# print('index %s %s' %(x,y))

# stop = time.time()

# print(stop - start)

## index(111,222)

# 解決方案二:失敗

# 問題:沒有修改被裝飾物件的呼叫方式,也沒有修改了其源**,並且加上了新功能

# 但是**冗餘

# import time

## def index(x,y):

# time.sleep(3)

# print('index %s %s' %(x,y))

## start=time.time()

# index(111,222)

# stop=time.time()

# print(stop - start)##

## start=time.time()

# index(111,222)

# stop=time.time()

# print(stop - start)##

# start=time.time()

# index(111,222)

# stop=time.time()

# print(stop - start)

# 解決方案三:失敗

# 問題:解決了方案二**冗餘問題,但帶來乙個新問題即函式的呼叫方式改變了

# import time

## def index(x,y):

# time.sleep(3)

# print('index %s %s' %(x,y))

## start=time.time()

# index(111,222)

# stop=time.time()

# print(stop - start)

#

# 方案三的優化一:將index的引數寫活了

# import time

## def index(x,y,z):

# time.sleep(3)

# print('index %s %s %s' %(x,y,z))

## start=time.time()

# index(*args,**kwargs) # index(3333,z=5555,y=44444)

# stop=time.time()

# print(stop - start)

#

# 方案三的優化二:在優化一的基礎上把被裝飾物件寫活了,原來只能裝飾index

# import time

## def index(x,y,z):

# time.sleep(3)

# print('index %s %s %s' %(x,y,z))

## def home(name):

# time.sleep(2)

# print('welcome %s to home page' %name)##

# def outter(func):

# # func = index的記憶體位址

# start=time.time()

# func(*args,**kwargs) # index的記憶體位址()

# stop=time.time()

# print(stop - start)##

## home('egon')

# # home(name='egon')

# import time

## def index(x,y,z):

# time.sleep(3)

# print('index %s %s %s' %(x,y,z))

## def home(name):

# time.sleep(2)

# print('welcome %s to home page' %name)

## def outter(func):

# start=time.time()

# res=func(*args,**kwargs)

# stop=time.time()

# print(stop - start)

# return res##

## home=outter(home)##

# print('返回值--》',res)

# 大方向:如何在方案三的基礎上不改變函式的呼叫方式

# 語法糖:讓你開心的語法

# # 在被裝飾物件正上方的單獨一行寫@裝飾器名字

# # @timmer # index=timmer(index)

# def index(x,y,z):

# time.sleep(3)

# print('index %s %s %s' %(x,y,z))

# 總結無參裝飾器模板

# def outter(func):

# # 1、呼叫原函式

# # 2、為其增加新功能

# res=func(*args,**kwargs)

# return res

Python學習筆記day17 無參裝飾器

與 都可以用在形參中,用在形參中他們是彙總的意思。是把多餘的位置實參給彙總成元組的形式,賦值給args 與 在是實參中,打散 彙總與打散互為逆過程 舉例說明 def index args,a 1,b 1 print args,a,b index args,kwargs 將args打散 index 1...

無參裝飾器

def index x,y print x,y index args,kwargs index y 222,x 111 可以把函式當做引數傳入 可以把函式當做返回值返回 def index return 123 def foo func return func foo index def outte...

實習日記 Day17

今日份 更新 今日份流水賬 需求更新 身為乙方,每當甲方需求更新的時候,應該都很煩吧。但是我發現我自己,也許是性格使然吧,居然覺得能盡可能去滿足客戶的需求,也是一件很有成就感的事。反倒是讓我提需求的話,我會產生一種給別人添麻煩的不適感 不過這也可能是我今日份的感想,換個日子興許就不這樣想了。工具更新...