# -*- coding: utf-8 -*-

username = "liyuzhoupan"
password = "123"

def author(wrappreType):
print("wrappreType:", wrappreType)

def outterwrapper(func):
def wrapper(*args, **kwargs):
if wrappreType == "login1":
username1 = input("Username:").strip()
password1 = input("Password:").strip()
if username == username1 and password == password1:
print("\033[32;1m Login success!\033[0m")
return func(*args, **kwargs)
else:
exit("\033[31;1m login fail \033[0m")
elif wrappreType == "login2":
print("login2 login")
return func(*args, **kwargs)
else:
print("xia J8 che")

return wrapper

return outterwrapper

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

@author(wrappreType="login1") # 调用装饰器,根据条件wrappreType进行调用
def hello_home():
print("this is hello_home")
return "from home"

@author(wrappreType="login2")
def hello_bbs():
print("this is hello_index")
return "from bbs"

hello_index()
print(hello_home())
print(hello_bbs())

python菜鸟学习: 12. 装饰器的中级用法的更多相关文章

  1. python函数学习之装饰器

    装饰器 装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能.装饰器的返回值也是一个函数对象. 分类: 1.不带参数的装饰器函数: def wrapper( ...

  2. python 基础篇 12 装饰器进阶

    本节主要内容:1. 通⽤装饰器回顾2. 函数的有⽤信息3. 带参数的装饰器4. 多个装饰器同时装饰⼀个函数 ⼀. 通⽤装饰器的回顾开闭原则: 对增加功能开放. 对修改代码封闭装饰器的作⽤: 在不改变原 ...

  3. 6月4日 python学习总结 装饰器复习

    1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本 ...

  4. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  5. Python装饰器的高级用法(翻译)

    原文地址 https://www.codementor.io/python/tutorial/advanced-use-python-decorators-class-function 介绍 我写这篇 ...

  6. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  7. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  8. Python装饰器的另类用法

    之前有比较系统介绍过Python的装饰器(请查阅<详解Python装饰器>),本文算是一个补充.今天我们一起探讨一下装饰器的另类用法. 语法回顾 开始之前我们再将Python装饰器的语法回 ...

  9. guxh的python笔记三:装饰器

    1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) tot ...

  10. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

随机推荐

  1. FLASH-CH32F103替换STM32F103 FLASH快速编程移植说明

    因CH32F103 相对于STM32F103 flash 操作多了快速编程模式,该文档说明主要目的是为了方便客户在原先ST 工程的基础上实现flash 快速编程模式的快速移植. 1.在stm32f10 ...

  2. c++ stl 详解 csp备考

    最近在准备csp认证考试,打算使用c++语言,以下是关于c++ stl库的内容: algorithm概览(作者:当格子衫爱上Helloworld) stl库详解(作者:c语言中文网) https:// ...

  3. vue3 ts遇到的问题

    main.ts中的 createApp(App),只作用于一个,如果,有两个,则并不是一个对象,另一个会不生效

  4. Spring03-IOC-循环依赖的实现(Debug查看spring解决循环依赖的过程)

    1 什么是循环依赖 如下,有类A和B,A中有一个类型为B的属性b,B中有一个类型为A的属性a,A和B相互依赖 public class A { private B b; public B getB() ...

  5. 大三末java实习生一面凉经

    在南京投了一些小公司,想找个实习,因为知道自己很菜,就收到了一家公司的面试. 面试一般在线上进行,我是在腾讯会议上进行的.面试官其实挺好的,一般不会为难你,因为他知道你是在校生不会懂那么多企业的技术. ...

  6. ROS创建一个基本功能包

    1.mkdir catkin_ws/src 2.cd catkin_ws/src 3.catkin_init_workspace 4.cd ~/catkin_ws/ 5.catkin_make 6.在 ...

  7. 学习Java Day13

    今天学习了对象与类,类是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例.类与类之间的关系有依赖,聚合,继承. 然后学习了如何构造对象.

  8. lua 控制语句

    for循环 模式1 for k,v in f, data, init_k do end 进行的操作是 f(data, old_k), 例如f(data, init_k) 渴望返回的是 new_k, v ...

  9. dotnet 缓存

    Net 内置内存缓存 asp.net 中是有缓存的实现:HttpContext.Cache,缓存的数据是放到 Web 服务器的进程 内存里. 在控制台.WinForm.子线程.SignalR 等不支持 ...

  10. JavaSE学习笔记(一)----java基础

    本文来自博客园,作者:{张果},转载请注明原文链接:{JavaSE学习总结(一)--java基础} 一.Java是什么 Java 是由 Sun Microsystems 在 1995 年首先发布的编程 ...