python函式之一 裝飾器

2021-06-21 12:42:50 字數 1723 閱讀 8697

裝飾器的語法以@開始,接著是裝飾器函式的名字和可選的引數。緊接著裝飾器宣告的是被修飾的函式和裝飾函式的可選引數。如下

@decorator(dec_opt_args)

def functobedecorated(func_opt_args):

..

對於多個裝飾器,使用數學定義表示如下:

( g.f )(x) = g( f(x) )
對於python中:

@g

@fdef foo():

..

等同於g(f(foo))

#!/usr/bin/env python

from time import ctime,sleep

def deco(func):

print '[%s] %s called' % (ctime(),func.__name__)

return func()

@deco

def foo():

print 'foo called'

if __name__=='__main__':

foo()

########################################

localhost:~ army$ ./deco.py

[sun apr 13 16:20:01 2014] foo called

foo called

eg:

#!/usr/bin/env python

from time import ctime,sleep

def deco(func):

print '[%s] %s called' % (ctime(),func.__name__)

return func(*argv)

@deco

def add(a,b):

print a+b

if __name__=='__main__':

add(1,2)

########################################

localhost:~ army$ ./deco.py

[sun apr 13 16:25:01 2014] add called

3

裝飾器帶引數,需要增加一層包裝

#!/usr/bin/env python

from time import ctime,sleep

def deco(arg):

def innerfunc(*argv):

print '[%s] %s called' % (arg , func.__name__)

return func(*argv)

return innerfunc

@deco('module')

def foo(a,b,c):

print a+b+c

if __name__=='__main__':

foo(1,2,3)

########################################

localhost:~ army$ ./deco.py

[module] foo called

6

python三大神器之一裝飾器

裝飾器的作用 在不改變原函式的情況下給函式增加功能!裝飾器由閉包和語法糖組成 閉包 即兩個函式巢狀,外部函式返回內部函式的引用,外部函式一定會傳入引數,外部函式起的是交換引用的作用 把要裝飾的引數 也就是裝飾前的函式 與 裝飾後的函式的引用對換,而里層的函式做的是執行操作,呼叫原函式就是在這裡執行的...

一 裝飾器基礎

1 裝飾器最初的形成 import time deftimer func timer是裝飾器函式 definner print time.time func f是被裝飾的函式 time.sleep 0.01 print time.time return inner deffun print 哇哈哈哈...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...