def log(func):
def wrapper(*args, **kw):
print 'call %s():' % func.__name__
return func(*args, **kw)
return wrapper
b=0
@log
def countdown(n):
b=0
while n>0:
n=n-1
b+=n
return b
print countdown(10)
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a27.py
call countdown():
45
一个装饰器就是一个函数,它接受一个函数作为参数并返回一个新的函数。装饰器其实就是一个闭包
# !/usr/bin/env python
# -*- coding: utf-8 -*-
def generate_greeting(prefix):
def greeting(name):
return prefix, name
return greeting
# 返回一个全新的函数
a = generate_greeting('aaabbb')
print a
print type(a)
print a('ffff')
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a28.py
<function greeting at 0x0258FA30>
<type 'function'>
('aaabbb', 'ffff')