裝飾器和偏函式

2021-08-29 14:11:57 字數 1167 閱讀 1158

1.裝飾器

讓其他函式在不需要做任何****變動的前提下增加額外的功能,返回值也是乙個函式物件

def a(func):

print(1)

def b():

print(2)

func()

print(3)

return b

@adef c():

print(4)

當程式執行時:先執行@a,得到乙個1和函式的物件b,b和b()是不一樣的

b只是乙個物件,並不會執行,然後當執行到c()的時候,相當於給了b執行的

引數,然後我們會執行2,func()得到4,3,到這裡程式結束

執行結果12

43如果被裝飾的函式需要引數,使用可變引數*args和關鍵字引數**kwargs,裝飾器可以使用任意目標引數

def debug(func):

print "[debug]: enter {}()".format(func.__name__)

return func(something)

@debug

def say(something):

print "hello {}!".format(something)

def debug(func):

print "[debug]: enter {}()".format(func.__name__)

print 'prepare and say...',

return func(*args, **kwargs)

@debug

def say(something):

print "hello {}!".format(something)

詳解

偏函式偏函式的第二個部分(可變引數),按原有函式的引數順序進行補充,引數將作用在原函式上,最後偏函式返回乙個新函式(類似於,裝飾器decorator,對於函式進行二次包裝,產生特殊效果;但又不同於裝飾器,偏函式產生了乙個新函式,而裝飾器,可改變被裝飾函式的函式入口位址也可以不影響原函式)

例子

import functools #匯入模組

int2=functools.partial(int,base=2) #int 函式,base引數

裝飾器和偏函式Python

裝飾器 概念 是乙個閉包,把乙個函式當做引數返回乙個替代函式,本質上是返回乙個函式的函式 def outer func def inner args,kwargs 新增修飾功能 print func args,kwargs return inner outer def myprint age,nam...

13 Python 裝飾器 偏函式

裝飾器 原函式 def now print 2019 01 10 print now.name 增加原函式的功能 def log func print call s func.name return func args,kw log def new print 2019 01 10 呼叫new函式時...

千峰筆記 裝飾器 偏函式 異常處理

概念 閉包,把乙個函式當作引數返回乙個替代版的函式,本質上就是乙個返回函式的函式 def funnc1 print sunck is a agood man def outer func def inner print func return inner f是函式func1的加強版本 f outer...