函数总结



问题汇总

  1. 命名规则: 除了类,常量定义,其他都小写。
  2. 缓存装饰器不要改变输入参数作为key
  3. 小心global
  4. 注意引用传递
  5. pep8 函数命名规则
  6. 习惯用try代替if(判断单一条件)
try:
    return cachekey
except:
  1. functools 来保留原函数的签名

exam0.py

from functools import wraps

def my_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper

@my_decorator
def say():
    '''here describe this function'''
    print "hello, called say() function"
>>> from exam0 import say
>>> say()
>>> hello, called say() function
>>> say.__name__                       #这里保留了say()被装饰之前的name
>>> 'say'
>>> say.__doc__                        #同样也保留了say()的docstring
>>> 'here describe this function'

让我们把”@wraps(func)“这句注释掉再试试看

exam0.py

from functools import wraps

def my_decorator(func):
    #@wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper

@my_decorator
def say():
    '''here describe this function'''
    print "hello, called say() function"
>>> from exam0 import say
>>> say()
>>> hello, called say() function
>>> say.__name__                        #这里替代了say()的name和docstring
>>> 'wrapper'
>>> say.__doc__