码迷,mamicode.com
首页 > 其他好文 > 详细

day4

时间:2018-03-05 17:08:51      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:span   log   lis   核心   abc   pos   本地   基础上   ret   

装饰器:

#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

标签:span   log   lis   核心   abc   pos   本地   基础上   ret   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!