Skip to content

Instantly share code, notes, and snippets.

@nature-python
Last active August 29, 2015 13:57
Show Gist options
  • Save nature-python/9485492 to your computer and use it in GitHub Desktop.
Save nature-python/9485492 to your computer and use it in GitHub Desktop.
python装饰符@学习,装饰函数

#python decorator @

python装饰器是对原函数的一层包装,旨在为原函数或者类似函数增加一个共同或者额外的功能

  1. 使用范式:先定义修饰函数,然后再用@来装饰原函数
#修饰函数方式一:
def dec(f):
  #do something here
  return f 
#修饰函数方式二:
def dec(f):
  #定义一个新函数
  def new_f():
    #do something here
    return f()
  return new_f
@dec
def original(*args,**kwargs):
  #do something original here, for example
  for i in args:
      print i
  for k,v in kwargs.items():
      print k,v
  1. 同义:
def dec(f)
  #do somethng
  return f
def original(*args,**kwargs):
  pass
original=dec(original)
  1. 装饰符带参数的函数
def dec(f):
  #do something
  def _dec(a,b):
    # do something
    f(a,b)
    
  return _dec
  1. 装饰带任意多个参数的函数
def dec(f):
  #do something
  def _dec(*args,**kwargs):
    #do something
    f(*args,**kwargs)
  return _dec
  1. 让装饰函数带参数
def dec(arg):
  def _dec(f):
    def __dec()
      #do something with arg
      f()
    return __dec
  return _dec
  1. functools模块
def thisIsliving(fun):
  def living(*args, **kw):
    return fun(*args, **kw) + '活着就是吃嘛。'
  return living

@thisIsliving
def whatIsLiving():
  "什么是活着"
  return '对啊,怎样才算活着呢?'

print whatIsLiving()
print whatIsLiving.__doc__

print

from functools import update_wrapper
def thisIsliving(fun):
  def living(*args, **kw):
    return fun(*args, **kw) + '活着就是吃嘛。'
  return update_wrapper(living, fun)

@thisIsliving
def whatIsLiving():
  "什么是活着"
  return '对啊,怎样才算活着呢?'

print whatIsLiving()
print whatIsLiving.__doc__
  1. 实例

Python小组-Decorator functools模块

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment