__author__ = "Aaron Fan"
import time #导入time模块
user,passwd = 'alex','abc123' #用户名密码
def auth(auth_type): #创建auth函数,创建auth_type形参
#print("auth func:",auth_type) #打印形参auth_type的值
def outer_wrapper(func): #创建outer_wrapper函数,创建func形参
def wrapper(*args, **kwargs): #创建wrapper函数,创建非固定参数*args,**kwargs
#print("wrapper func args:", *args, **kwargs) #打印传进来的这些非固定参数的值
if auth_type == "local": #如果auth函数中的形参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) # from home #这里主要是为了显示home()函数中的return值:from home
print("---after authenticaion ") #打印一句话
return res #返回定义的res变量的值 else: #否则账号或者密码错误
exit("\033[31;1mInvalid username or password\033[0m")
elif auth_type == "ldap": #如果auth函数中的形参auth_type的值等于ldap
print("搞毛线ldap,不会。。。。") #ldap的处理语句,这里暂时先用一句print代替了,记得后面练习是需要去细化一下 return wrapper #return wrapper
return outer_wrapper #return outer_wrapper # index主页,不需要用户名密码,可以直接登录,所以这里也无需装饰器
def index():
print("welcome to index page") #home页面,需要通过local方式来匹配用户登陆
@auth(auth_type="local") # home = wrapper()
#注意@auth代表auth(),而@auth(auth_type="local")代表outer_wrapper()
#所以这里其实是指 home = outer_wrapper(home) = wrapper
def home():
print("welcome to home page")
return "from home" #bbs页面,需要通过ldap方式来匹配用户登陆
@auth(auth_type="ldap")
def bbs():
print("welcome to bbs page") index()
print(home()) #其实执行的是wrapper() 这个方式会显示home的return值
#home() #其实执行的是wrapper() 这个不会显示return值
bbs() #其实执行的是wrapper()

python3--装饰器高级学习版的更多相关文章

  1. Python装饰器模式学习总结

    装饰器模式,重点在于装饰.装饰的核心仍旧是被装饰对象. 类比于Java编程的时候的包装模式,是同样的道理.虽然概念上稍有不同但是原理上还是比较相近的.下面我就来谈一谈我对Python的装饰器的学习的一 ...

  2. 净心诀---python3装饰器

    python3装饰器 装饰器作用 简单理解:可以为已有函数添加额外功能 例: 已有2个函数如下 def MyFunc1(): print("This is a print function1 ...

  3. Python函数装饰器高级用法

    在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...

  4. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  5. python3 装饰器应用举例

    [引子] python 中的装饰器是oop(面向对象编程)设计模式.之装饰器模式的一个应用.由于有语法糖衣的缘故.所以写起来也更加方便 [从一个比较经典的应用场景来讲解装饰器] 有过一定编程经历的工程 ...

  6. python3 装饰器全解

    本章结构: 1.理解装饰器的前提准备 2.装饰器:无参/带参的被装饰函数,无参/带参的装饰函数 3.装饰器的缺点 4.python3的内置装饰器 5.本文参考 理解装饰器的前提:1.所有东西都是对象( ...

  7. Python学习---装饰器的学习1210

    装饰器的基础 学习前提: 作用域 + 函数的理解 + 闭包  [学习,理解] 代码编写原则: 对修改开放对扩展开放 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前 ...

  8. python装饰器的学习笔记

    此博文是我对装饰器的一些理解,如果有错误欢迎及时留言,我会第一时间向大家学习. 一.什么是装饰器 1.从字面意义来看: 是用来给函数装饰打扮的函数 2.理论上可以理解为: (1).不改变函数的运行方式 ...

  9. python3 装饰器

    #Author by Andy#_*_ coding:utf-8 _*_#装饰器的原则及构成:# 原则:# 1.不能修改被装饰函数的源代码.# 2.不能修改被装饰函数的调用方式.# 3.不能改变被装饰 ...

随机推荐

  1. PL/SQL Developer 建立远程连接数据库的配置 和安装包+汉化包+注册机

    PL/SQL Developer ,主要是讲一下如何配置PL/SQL Developer ,连接Oracle数据库. [知识点] 1.PL/SQL Developer 是什么? PL/SQL Deve ...

  2. YII缓存之数据缓存

    1.开启缓存组件 2. ================ 二 先在配置文件components数组中加上: 'cache'=>array( 'class'=>'CFileCache'), ...

  3. Python脚本MAC上双击执行,如何设置?

    1.在文件首行添加如下代码: 如果你想使用默认python版本执行当前的脚本,即python2,则需要添加 #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  4. RK3288 dts文件中背光配置参数

    backlight { // 设备名(用于匹配) compatible = "pwm-backlight"; // pwm编号 通道 频率(ns) pwms = <& ...

  5. MFC命令消息的路由

    下面,我们以Menu这个程序为例,来看看 菜单命令消息路由的具体过程:当单击某个菜单项时,最先接收到这个菜单命令消息的是框架类.框架类将把接收到的这个消息交给它的子窗口.即视类,由视类首先进行处理.视 ...

  6. optimize table tablename

    optimize 优化表OPTIMIZE 命令支持的引擎MyIsam, InnoDB, ARCHVE当对表有大量的增删改操作时,需要用optimize对表进行优化,可以减少空间与提高I/O性能,命令o ...

  7. classpath和环境变量设置

    一.简介: 环境变量是操作系统.应用程序.脚本程序等等的指明灯,能够告诉他们需要的资源在哪里.大多数的 系统都有一些预先设置好的环境变量,当然,我们也可以增加自己的环境变量. 为了看看当前系统的环境变 ...

  8. linux输入子系统之按键驱动

    上一节中,我们讲解了Linux  input子系统的框架,到内核源码里详细分析了输入子系统的分离分层的框架等. 上一节文章链接:http://blog.csdn.net/lwj103862095/ar ...

  9. Py修行路 python基础 (十一)迭代器 与 生成器

    一.什么是迭代? 迭代通俗的讲就是一个遍历重复的过程. 维基百科中 迭代(Iteration) 的一个通用概念是:重复某个过程的行为,这个过程中的每次重复称为一次迭代.具体对应到Python编程中就是 ...

  10. BugkuCTF WEB

    web2 打开链接,一大堆表情 查看源代码 得到 flag 文件上传测试 打开链接 选择 1 个 jpg 文件进行上传,用 burp 抓包改包 将 php 改为 jpg,发包 得到 flag 计算器 ...