# 裝飾器
# 特徵: 是用一個@開頭的字符串
# 裝飾器一般用來裝飾函數、或者類的方法
# 被裝飾後的函數,一般是在原有的函數基礎上,會多出增長一點功能
# 通常來講裝飾器自己也是一個函數
#
# def test(name):
# def test_in():
# print(name)
# return test_in
#
# func = test('peiyanan')
# func()app
'''
邏輯思想:①首先把peiyanan實參傳遞給test函數
②在執行test函數時,又返回到test_in函數
③執行test_in函數並打印輸出
'''函數
# =================================================================================
# 不帶參數的裝飾器(裝飾器、被裝飾函數都不帶參數)
# import time
# def showTime(func):
# def wrapper():
# start = time.time()
# func()
# end = time.time()
# print('spend is {}'.format(end-start))
#
# return wrapper
#
#
#
# @showTime # foo = showTime(foo)
# def foo():
# print('foo..')
# time.sleep(3)
#
#
# foo()orm
'''
邏輯思想:①首先將foo函數當作參數的形式傳遞到showTime函數中去
②在執行showTime函數的同時,會先打印出foo函數中的
③而後又將返回給wrapper函數
④最後逕wrapper函數並打印輸出
'''字符串
# ==================================================================================
# 帶參數的被裝飾的函數
import time
def showTime(func):
def wrapper(x, y):
start = time.time()
func(x, y)
end = time.time()
print('spend is {}'.format(end-start))form
return wrapperclass
@showTime # foo = showTime(foo)
def foo(x, y):
print(x+y)
time.sleep(3)test
foo(4, 5)import
'''
邏輯思想:①foo函數調用,執行foo函數體並打印輸出
②接着showTime函數調用foo(這裏foo既能夠看作一個參數,也能夠看作是一個函數),傳遞給showTime函數體
③執行showTime函數體,遇到return,又返回給了wrapper函數體
④執行wrapper函數體時,一次執行並最後輸出
'''基礎
# 使用裝飾器的缺點
# 不要在裝飾器以外添加邏輯功能
# 不能裝飾@staticmethod或者@classmethod已經裝飾過的方法
# 裝飾器會對原函數的原信息進行更改
# 裝飾器
# 特徵: 是用一個@開頭的字符串
# 裝飾器一般用來裝飾函數、或者類的方法
# 被裝飾後的函數,一般是在原有的函數基礎上,會多出增長一點功能
# 通常來講裝飾器自己也是一個函數
#
# def test(name):
# def test_in():
# print(name)
# return test_in
#
# func = test('peiyanan')
# func()方法
'''
邏輯思想:①首先把peiyanan實參傳遞給test函數
②在執行test函數時,又返回到test_in函數
③執行test_in函數並打印輸出
'''
# =================================================================================
# 不帶參數的裝飾器(裝飾器、被裝飾函數都不帶參數)
# import time
# def showTime(func):
# def wrapper():
# start = time.time()
# func()
# end = time.time()
# print('spend is {}'.format(end-start))
#
# return wrapper
#
#
#
# @showTime # foo = showTime(foo)
# def foo():
# print('foo..')
# time.sleep(3)
#
#
# foo()
'''
邏輯思想:①首先將foo函數當作參數的形式傳遞到showTime函數中去
②在執行showTime函數的同時,會先打印出foo函數中的
③而後又將返回給wrapper函數
④最後逕wrapper函數並打印輸出
'''
# ==================================================================================
# 帶參數的被裝飾的函數
import time
def showTime(func):
def wrapper(x, y):
start = time.time()
func(x, y)
end = time.time()
print('spend is {}'.format(end-start))
return wrapper
@showTime # foo = showTime(foo)
def foo(x, y):
print(x+y)
time.sleep(3)
foo(4, 5)
'''
邏輯思想:①foo函數調用,執行foo函數體並打印輸出
②接着showTime函數調用foo(這裏foo既能夠看作一個參數,也能夠看作是一個函數),傳遞給showTime函數體
③執行showTime函數體,遇到return,又返回給了wrapper函數體
④執行wrapper函數體時,一次執行並最後輸出
'''
# 使用裝飾器的缺點# 不要在裝飾器以外添加邏輯功能# 不能裝飾@staticmethod或者@classmethod已經裝飾過的方法# 裝飾器會對原函數的原信息進行更改