zoukankan      html  css  js  c++  java
  • python基础——装饰器

    装饰器的作用,在不改变函数的情况下,在函数前后添加功能。

    文件1:zsq1.py

    #!/usr/bin/env python3
    
    def outer(func):
        def inner(*args,**kwargs):
            print("before")
            r=func(*args,**kwargs)
            print("after")
            return r
        return inner  #返回
    
    @outer
    def f1(arg):
        print(arg)
        return "原始f1的返回值"
    
    @outer
    def f2(arg1,arg2):
        print(arg1,arg2)
    
    """
    @+函数名
    功能:
        1.自动执行outer函数,并且将下面的函数名f1当作参数传递,相当于把原始f1赋值给func
        2.将outer函数的返回值,内层inner函数,重新赋值给f1,相当于把f1变成inner去执行
    """
    
    ret=f1("ss")
    print("返回值",ret)
    
    ret=f2("aa","bb")
    print("返回值",ret)

    文件2:zsq2.py

    import zsq1
    ret=zsq1.f1("ss")
    print("返回值",ret)
    
    ret=zsq1.f2("11","22")
    print("返回值",ret)

    装饰器做权限认证

    LOGIN_USER = {"is_login":False}
    
    def outer(func):
        def inner(*args,**kwargs):
            if LOGIN_USER["is_login"]:
                r=func()
                return r
            else:
                print("请登录")
        return inner
    
    @outer
    def manager():
        print("后台管理")
        print("欢迎%s登陆" % LOGIN_USER["current_user"])
    
    def login(username,pwd):
        if username=="ss" and pwd =="123":
            LOGIN_USER["is_login"]=True
            LOGIN_USER["current_user"]=username
            manager()
    
    def main():
        inp=input("1.后台管理;2.登陆")
        if inp=="1":
            manager()
        elif inp=="2":
            username=input("用户名")
            passwd=input("密码")
            login(username,passwd)
    
    main()

    多层装饰器

    USER_INFO={}
    
    def check_login(func):
        def inner(*args,**kwargs):
            if USER_INFO.get("is_login",None):
                ret=func(*args,**kwargs)
                return ret
            else:
                print("请登录")
                login()
        return inner
    def check_admin(func):
        def inner(*args,**kwargs):
            if USER_INFO.get("user_type",None) ==1:
                ret=func(*args,**kwargs)
                return ret
            else:
                print("无权限")
        return inner
    
    
    @check_login
    @check_admin
    def index():    #管理员功能
        print("index")
    
    @check_login
    def home(): #普通用户
        print("home")
    
    def login():
        username=input("用户名")
        pwd=input("密码")
        if username=="admin" and pwd=="123":
            USER_INFO["is_login"] = True
            USER_INFO["user_type"] =1
        if username=="ss" and pwd=="123":
            USER_INFO["is_login"] =True
            USER_INFO["user_type"] =2
        else:
            print(错误)
    
    
    def main():
        inp=input("1.登陆;2.查看信息;3.超级管理员")
        if inp=="1":
            login()
        elif inp=="2":
            home()
        elif inp=="3":
            index()
    
    main()
  • 相关阅读:
    puppeteer,新款headless chrome!
    圣诞快乐,而且写博客有两年了~
    es2015及es2017对我们的编程方式造成了什么影响?
    Redis的安装和部署
    ActiveMQ5.0实战三:使用Spring发送,消费topic和queue消息
    hsweb 企业后台管理基础框架
    通过Spring Session实现新一代的Session管理
    mod_pagespeed
    unusedjs
    apache模块 合并多个js/css 提高网页加载速度
  • 原文地址:https://www.cnblogs.com/maxgongzuo/p/5829244.html
Copyright © 2011-2022 走看看