最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python裝飾器相當于函數(shù)的調(diào)用方式

 更新時間:2019年12月27日 10:27:10   作者:vwangwang  
今天小編就為大家分享一篇python裝飾器相當于函數(shù)的調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1. 普通裝飾器

 import logging
 
 1. foo = use_loggine(foo)
 def use_loggine(func):
 def wrapper():
  logging.warn("%s is running " % func.__name__)
  return func()
 return wrapper
 
 @use_loggine
 def foo():
 print "aaa"
 foo()
 print foo.__name__

2. func 需要參數(shù):

foo = use_loggine(foo) 第一個參數(shù)就是func這個函數(shù)對象,不包含參數(shù)foo(params)

 def use_loggine(func):
 def wrapper(name):
  logging.warn("%s is running " % func.__name__)
  return func(name)
 return wrapper
 
 
 @use_loggine
 def foo(name):
 print "name is %s" % name

3. 裝飾器帶參數(shù)

 foo = use_logging('warn')(foo) 還是把被裝飾的函數(shù)當做參數(shù)賦給裝飾器

 def use_logging(level):
 def decorator(func):
 def wrapper(*args, **kwargs):
  if level == 'warn':
  logging.warn("%s is running" % func.__name__)
  elif level == 'info':
  logging.warn("%s is running" % func.__name__)
  return func(*args)
 return wrapper
 return decorator
 
 @use_logging('warn')
 def foo(name):
 print "i am %s" % name
 
 foo = use_logging('warn')(foo)
 print foo.__name__
 foo('foo')

4. 類裝飾器,還是把被裝飾的函數(shù)當做參數(shù)賦給裝飾器

 foo = Foo(params)(func)
 
 class Foo(object):
 def __init__(self, name):
 self.name = name
 
 def __call__(self, func):
 def aa():
  print "class decorator running"
  print "name is :%s" % self.name
  func()
  print 'class decorator ending'
 return aa

 @Foo("hello")
 def bar():
 print "world"
 
 bar()
 
 @deco
 def foo()
 pass
 
 foo = deco(foo)
 
 @deco(xx)
 def foo():
 pass
 
 foo = deco(xx)(foo)

5. 類方法裝飾器

類方法裝飾器和其他裝飾器沒有什么區(qū)別,只不過在裝飾器內(nèi)部返回的函數(shù)中,第一個參數(shù)是固定的,是調(diào)用方法的對象本身,如

果是實例對象,就是self,是類方法的話,就是cls,靜態(tài)方法的話,沒有第一個參數(shù)。

 from functools import wraps

 
 def method_decor(func):
 @wraps(func)
 def wrapper(*args, **kwargs):
  try:
  u = func(*args, **kwargs)
  return u
  except Exception as e:
  args[0].bb() # args[0]就是self或者cls??梢栽赼rgs前面定義self,更加方便u = func(self,*args, **kwargs)
  return 'an Exception raised.'
 
 return wrapper
 
 
 class Foo(object):
 
 @method_decor
 def aa(self):
  # print("This is wraped method")
  raise Exception('aa')
 
 def bb(self):
  print("This is called method")
 
 
 
 a = Foo()
 a.aa()

以上這篇python裝飾器相當于函數(shù)的調(diào)用方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

湄潭县| 兴隆县| 五原县| 龙里县| 无极县| 绥芬河市| 盐边县| 拜城县| 河北区| 晋中市| 北辰区| 突泉县| 图木舒克市| 安吉县| 山东省| 嘉鱼县| 绍兴县| 肃南| 锦屏县| 鄱阳县| 菏泽市| 铜陵市| 祁门县| 银川市| 漳州市| 左云县| 东明县| 岫岩| 婺源县| 建水县| 卓资县| 新泰市| 府谷县| 乐清市| 石门县| 西和县| 澜沧| 繁昌县| 章丘市| 鄂州市| 九寨沟县|