首页 > 其他 > 详细

day4

时间:2018-03-05 16:29:55      阅读:205      评论:0      收藏:0      [点我收藏+]

装饰器:

#1 、函数即变量
#2、高阶函数
#       1) 把函数当参数传
#       2)有以函数当返回值
#3、函数的嵌套
        #1)是函数里面又以def关键字定义一个函数
        #2)注意:如果在函数里面使用另一个函数叫函数调用而不嵌套
#3 、装饰器= 高阶函数+ 嵌套函数


def timer(func):#定义一个嵌套函数
    def decorator(*args,**kwargs):  # 为了方便所认的函数都能使用该装饰器 所以这里用不定长形参来接收
        print(‘装饰开始‘)
        print(kwargs)
        func(*args,**kwargs)  #真正需要装饰的函数
        print(‘装饰结束‘)
    return decorator #返回函数

@timer #实际就等是 test1 = timer(test1)

def test1():
    print(‘我是test1‘)
test1()

@timer #实际等于 test2 = timer(test2) 语法糖

def test2(*args,name,age):
    print(‘我是test2 args=%s kwargs=%s list=%s‘%(name,age,args))
test1()
test2(1,2,13,name=‘xiaoming‘,age=‘18‘)

可以带参数的装饰器  核心就是在外面多加一层函数来接收装饰器带过来的参数

# 在上个版本的基础上增加 装饰器传参 和 被装饰的函数没有返回值问题


name = ‘alex‘
password = ‘abc123‘
#定义一个装饰器

def timer(*timer): #这里的dec是装饰器传过来的参数
    print(timer[0])

    def out_decrator(func): #func是需要被装饰的函数
        def decrator(*args,**kwargs):

                if timer[0]==‘file‘:#本地验证
                    inputname = input(‘输入用户名:‘)
                    inputpass = input(‘请输入密码:‘)
                    if inputname == name and inputpass == password :
                        print(‘开始装饰‘)
                        print(args ,kwargs)
                        re = func(*args,**kwargs)  #如果被装饰的函数返回值用一个变量来接收
                        return re
                        print(‘结束装饰‘)
                    else:
                        exit(‘用户名或密码错误 ‘)
                elif args[0]==‘ldap‘:
                    print(‘需要网络验证‘)
                else:
                    print(‘不带参数的装饰器‘)


        return decrator
    return out_decrator

@timer(‘loca‘)

def index():
    print(‘this is index ‘)

@timer(‘file‘)

def home(a):
    print(‘thist is home‘,a)
    return 1
home(‘a‘)

 

day4

原文:https://www.cnblogs.com/qq769080870/p/8509570.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!