python 裝飾器詳解

2022-06-13 05:09:11 字數 1033 閱讀 2131

裝飾器:

定義:本質是函式,(裝飾其他函式)就是為其他函式新增附加功能

原則:1.不能修改被裝飾的函式的源**

2.不能修改被裝飾的函式的呼叫方式

import time

#巢狀函式

def foo():

print('in the foo')

def bar():

print('in the bar')

bar()

foo()

#裝飾器

def timer(func):

def deco(*args,**kwargs):#timer(test) func=test *args,**kwargs帶人引數

start_time = time.time()

func(*args,**kwargs)#run test

stop_time = time.time()

print('the func run time is %s'%(stop_time-start_time))

return deco

@timer#test=timer(test)

def test():

time.sleep(2)

print('in the test')

@timer

def test2(name,age):

time.sleep(1)

print('test2',name,age)

test()

test2('ailice',33)

#列表生成式

print([i*2 for i in range(10)])

# #生成器

# a=(i*2 for i in range(10000000))

# #下乙個數值

# print(a.__next__())

# print(a.__next__())

# print(a.__next__())

python裝飾器 python 裝飾器詳解

def outer x def inner y return x y return inner print outer 6 5 11 如 所示,在outer函式內,又定義了乙個inner函式,並且inner函式又引用了外部函式outer的變數x,這就是乙個閉包了。在輸出時,outer 6 5 第乙個...

python裝飾器詳解 python裝飾器詳解

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

詳解Python裝飾器

裝飾器的難點 在梳理了裝飾器的整個內容之後,我認為難點不是裝飾器本身,而是直接呼叫被裝飾的函式,讓人無法理解背後究竟發生了什麼。一 引出裝飾器概念 引入問題 定義了乙個函式,想在執行時動態的增加功能,又不想改動函式本身的 示例 希望對下列函式呼叫增加log功能,列印出函式呼叫 def f1 x re...