python -装饰器

函数式编程
函数作为形参传入函数:
#!/usr/bin/env python
# coding:utf-8
def cacl_sum(*args):  #args为元组
        all_sum = 0
        for i in args:
                all_sum += i
        return all_sum

print cacl_sum(1,2,3,4,5)



函数作为返回值,为闭包形式
#!/usr/bin/env python
# coding:utf-8
def lazy_sum(*args):
        def cacl_sum():
                all_sum = 0
                for i in args:
                        all_sum += i
                return all_sum
        return cacl_sum
f = lazy_sum(1,2,3,4,5)  #f实质上为lazy_sum的返回值,是一个函数名
print f()     #实质上调用了cacl_sum函数并运行


装饰器:
1.器可以理解为函数
2.装饰器其实就是用来装饰函数的,只是在函数原有的功呢上在添加一些其他的功能
3.装饰器的功能:比如权限的验证,日志记录,函数运行时间统计,执行函数前预备处理,执行函数后的清理等
接下来我们通过简单的例子来了解装饰器的功能:
#!/usr/bin/env python
# coding:utf-8
def addinfo(fun): #fun为函数,在此作为addinfo的形参
        def wrapped():
                print "欢迎光临中国建设银行"
                fun()
        return wrapped
@addinfo   #装饰器的语法糖,等同于login = addinfo(login)
def login():
        print "登录系统"
@addinfo
def kaihu():
        print "开户系统"
login()
kaihu()


可以利用装饰器实现函数记时器的功能
#!/usr/bin/env python
# coding:utf-8
import time #倒入time模块
def Time(fun):
        def wrapped():
                print "欢迎光临中国建设银行"
                start_time = time.time()  #函数运行前的时间
                fun()
                end_time = time.time()  #函数运行后的时间
                print "运行时间为%s" %(end_time - start_time)
        return wrapped
@Time
def login():
        print "登录系统"
@Time
def kaihu():
        print "开户系统"
login()
kaihu()


装饰器带有参数(在原有的装饰器函数上在进行闭包处理)
#!/usr/bin/env python
# coding:utf-8
def addinfo(pre = ""):  #定义空的字符串
        def info(fun):
                def wrapped():
                        print "欢迎光临建设银行的%s系统" %(pre)
                        fun()
                return wrapped
        return info
@addinfo("登陆")
def login():
        print "登录系统"
@addinfo("开户")
def kaihu():
        print "开户系统"
login()
kaihu()


装饰器案例之引入日志
#!/usr/bin/env python
# coding:utf-8
import time
def logger(fun):
        def wrapped(*args):
                fun(*args)
                print "%s start %s(%s)" %(time.time(),fun.__name__,args)
        return wrapped
@logger
def login():
        print "login"
@logger
def add(x,y):
        print x+y
login()

add(3,4)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值