裝飾器的解析

2021-09-13 20:05:18 字數 1449 閱讀 1293

# -*- coding: utf-8 -*-

"""created on wed mar 27 10:06:28 2019

@author: wangzhe

裝飾器的用法 2019-03-27

"""import time

import functools

x = 1

y = x

#(1)

def test0():

time.sleep(2)

print("test is run")

def test1():

print("do something")

print("test1函式的內容:" + str(test1()))

#test2 = lambda x:x * 2

#print(test2(x))

#(2)

def doce(func):

start = time.time()

func()

end = time.time()

print("函式執行的時間為:" + str(end-start))

#將函式名當作實參傳給另外乙個函式(「實參高階函式」)

#返回值中包含函式名(「返回值高階函式」)

#doce(test)

#(3)

def doce1(func):

print("不修改函式test的呼叫方式test()")

return func

#t = doce1(test)

#t()

#(4)

def timer(func):

#為了防止test的函式名改變,採用如下方法(1)

@functools.wraps(func)

def doce(*args,**kwargs):

start = time.time()

res = func(*args,**kwargs)

end = time.time()

print("函式執行的時間為:" + str(end-start))

#為了防止test的函式名改變,採用如下方法(2)

#doce.__name__ = func.__name__

return res

return doce #返回doce()函式的位址

#test = timer(test) #等價於@timer

#test() #此時的test不是原來的test了,而是doce

@timer

def test(s):

time.sleep(2)

print("test is run")

return "你好!!"

print(test("123"))

print("test函式名是:" + str(test.__name__))

python裝飾器解析 Python裝飾器詳解

按照 python 的程式設計原則,當乙個函式被定義後,如要修改或擴充套件其功能應盡量避免直接修改函式定義的 段,否則該函式在其他地方被呼叫時將無法正常執行。因此,當需要修改或擴充套件已被定義的函式的功能而不希望直接修改其 時,可以使用裝飾器。先來看乙個簡單的例子 def func1 functio...

python裝飾器的詳細解析

寫在前面 python裝飾器 fuctional decorators 就是用於拓展原來函式功能的一種函式,目的是在不改變原函式名 或類名 的情況下,給函式增加新的功能。這個函式的特殊之處在於它的返回值也是乙個函式,這個函式是內嵌 原 函式的函式。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入...

python裝飾器解析(一)

裝飾器是一種著名的設計模式,允許我們動態的為乙個物件來新增一些額外的功能而無需去修改它所在的類或者是建立新類。python中的函式也是一種物件,下面用幾個函式例項來說明python中的裝飾器。首先從最簡單的開始,假設我們有如下的函式 def my func print do something 現在...