Python学习之路:装饰器实现终极版

网站实现验证功能装饰器:

import time
user,passwd=‘alex‘,‘abc123‘
def auth(func):
    def wrapper(*args,**kwargs):
        print("wraper func args:",*args,**kwargs)
        username=input("Username:").strip()
        password=input("Password:").strip()

        if user==username and passwd==password:
            print("\033[32;1mUser has passed authentication\033[0m")
            func(*args,**kwargs)#
            #print("---after authentication---")#保留要装饰函数home的输出结果
            #return res
        else:
            exit("\033[31;1mInvalid username or password\033[0m")
    return wrapper

def index():
    print("welcome to index page")

@auth
def home():
    print("welcome to home page ")
    return "from home"

@auth
def bbs():
    print("welcome to bbs page")

index()
home()
print(home())#执行结果为空,调用home相当于调用wraper
bbs()

保留要装饰函数的返回结果:

import time
user,passwd=‘alex‘,‘abc123‘
def auth(func):
    def wrapper(*args,**kwargs):
        print("wraper func args:",*args,**kwargs)
        username=input("Username:").strip()
        password=input("Password:").strip()

        if user==username and passwd==password:
            print("\033[32;1mUser has passed authentication\033[0m")
            res=func(*args,**kwargs)#
            print("---after authentication---")#保留要装饰函数home的输出结果
            return res
        else:
            exit("\033[31;1mInvalid username or password\033[0m")
    return wrapper

def index():
    print("welcome to index page")

@auth
def home():
    print("welcome to home page ")
    return "from home"

@auth
def bbs():
    print("welcome to bbs page")

index()
home()
print(home())#执行结果为空,调用home相当于调用wraper
bbs()

不同网页不同验证方式的装饰器:

import time
user,passwd=‘alex‘,‘abc123‘
def auth(auth_type):
    print("auth func:",auth_type)
    def outer_auth(func):
        def wrapper(*args,**kwargs):
            print("wraper func args:",*args,**kwargs)
            if auth_type=="local":
                username=input("Username:").strip()
                password=input("Password:").strip()

                if user==username and passwd==password:
                    print("\033[32;1mUser has passed authentication\033[0m")
                    res=func(*args,**kwargs)#
                    print("---after authentication---")#保留要装饰函数home的输出结果
                    return res
                else:
                    exit("\033[31;1mInvalid username or password\033[0m")
            elif auth_type=="ldap":
                print("搞毛线ldap,不会。。。。")
        return wrapper
    return outer_auth

def index():
    print("welcome to index page")

@auth(auth_type="local")
def home():
    print("welcome to home page ")
    return "from home"

@auth(auth_type="ldap")
def bbs():
    print("welcome to bbs page")

index()
home()
print(home())#执行结果为空,调用home相当于调用wraper
bbs()
时间: 2024-10-11 16:16:50

Python学习之路:装饰器实现终极版的相关文章

Python学习之路-装饰器&生成器&正则表达式

装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(func):     def inner():         if USER_TEMP["status"] == False:             print("\033[31;1m用户未登录,请先登录\033[0m")             login_atm()

python学习笔记(五):装饰器、生成器、内置函数、json

这周学习了装饰器和生成器,写下博客,记录一下装饰器和生成器相关的内容. 一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面每个函数都加一个功能,用来统计每个函数的运行时间是多少,找出来运行比较慢的函数,来优化代码,就需要添加一个新的功能,来统计程序的运行时间,那这样的话,就得修改每个函数了,需要改代码,但是代码特别多,改完了公司倒闭了,这时候装饰

python学习笔记:装饰器2

python的装饰器本质是函数,为了不改变装饰目标函数内部代码而增加额外功能而存在 直接举例: import datetime def func_name(func):#定义一个装饰函数,接受一个函数对象作为参数(也就是被装饰的函数) def wrap():#包装函数 print("Function name:%s"%(func.__name__)) func() #执行目标函数 return wrap #返回包装函数 @func_name #等于 func_time = func_n

Python自学之路——装饰器的秘密

先不管装饰器到底是个什么东东,让我们来聊一聊函数的几个点吧.我们知道,在python里,一切皆是对象,那么函数呢,当然也是对象,而且人家还是一级对象呐.既然是对象,那它就可以被赋值给变量,反之,通过变量也能调用函数.好,需特别注意的点来了,函数调用一定是函数名 + (),如果没有这个括号,函数是不会被调用的,它只能是表示内存里的一个地址,看下面 1 def happy(): 2 print('be happy') 3 print (happy) #并没有调用happy函数,只是打印了happy的

Python学习笔记012——装饰器

1 装饰器 1.1装饰器定义 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 1.2 装饰器分类 装饰器:函数装饰器,类装饰器,函数的装饰器,类的装饰器 装饰器:函数装饰函数,函数装饰类,类装饰函数,类装饰类(两者不是一一对应关系,其实我也不知道他们之间是什么样的对应关系) 一般而言,主要应用的是函数装饰函数 1.3 装饰器本质 本质上,decorator就是一个返回函数的高阶函数. 在面向对象(OOP)的设计模式中,decorator被称为装饰模式.OOP

python学习笔记之装饰器(语法糖)

什么是装饰器 装饰器的知识点铺垫(函数即变量,高阶函数,嵌套函数) 不带参数的装饰器示例 带参数的装饰器示例 作业 一.什么是装饰器 本质上,装饰器就是返回一个函数的高阶函数.装饰器就是一个函数 装饰器的原则: 不修改被装饰对象的源代码 不修改被装饰对象的调用方式 二.装饰器涉及的知识点 函数即变量 高阶函数 嵌套函数 函数即变量: 在python中,一个变量首先被定义,分配内存空间,然后再使用. 以x=1,这个简单的赋值语句为例子.首先在内存中分配一个空间,x指向该内存空间,该内存空间内存入"

从零开始的Python学习Episode 11——装饰器

装饰器 装饰器是用来处理其他函数的函数,主要作用是在不修改原有函数的情况下添加新的功能,装饰器的返回值也是一个函数对象. 简单的装饰器 1 import time 2 3 def show_time(f): 4 def inner(): 5 start = time.time() 6 f() 7 end = time.time() 8 print('time: %s'%(end-start)) 9 return inner 10 11 @show_time 12 def fun1(): 13 p

python学习笔记之——装饰器及对象

1.反射之__import__ 我们知道import语句是用来导入外部模块的,当然还有from...import...也可以,但是其实import实际上是使用builtin函数__import__来工作的.        在一些程序中,我们可以动态地去调用函数,如果我们知道模块的名称(字符串)的时候,我们可以很方便的使用动态调用. __import__(module_name[, globals[, locals[, fromlist]]]) #可选参数默认为globals(),locals()

python笔记-4(装饰器、生成器、迭代器)

一.熟练掌握装饰器的原理 (在装饰器学习的过程中,查了看了很多资料,个人感觉走了很多的弯路,这个笔记,分享我的理解,希望能帮助到一些人.本文对装饰器的描述,侧重点是条理与逻辑思路,想通过从无到有的方式,描述一个理解的过程,重点在step by step 更快的理解这个东西) 需要理解装饰器的两大组成,使用装饰器时能解决不确定长度的形参传递.函数返回值及条件判断的场景. 1.使用装饰器的目的及原则 目的:为原来的函数增加一些新的功能,如日志输出,运行时间计算,登录退出等. 实现的原则(两点): (