#Author by Andy
#_*_ coding:utf-8 _*_
#装饰器的原则及构成:
# 原则:
# 1、不能修改被装饰函数的源代码。
# 2、不能修改被装饰函数的调用方式。
# 3、不能改变被装饰函数的执行结果。
# 装饰器对被装饰函数是透明的。
#
# 如何理解装饰器
# 1、函数即“变量”
# 2、高阶函数
# a:把一个函数名作为实参传递给另外一个函数
# b:返回值中包含函数名
# 3、嵌套函数
#
# 在一个函数体内声明另一个函数称为函数的嵌套
#装饰器例子:
import time
# def timmer(func):
# def warpper(*args,**kwargs):
# start_time=time.time()
# func()
# stop_time=time.time()
# print('the func run time is %s'%(stop_time-start_time))
# return warpper
# @timmer
# def func1():
# time.sleep(5)
# print("I'm a test!")
# func1()
##########################################################################
#1、函数即变量
# def func2(x):
# print('i am %s'%x)
# func3()
# def func3():
# print("func3")
# return "func3"
# func2(func3())
##########################################################################
# 2、高阶函数
# a:把一个函数名作为实参传递给另外一个函数
# b:返回值中包含函数名
#定义一个高阶函数func4
# def func4(func):
# print("i am func4")
# func()
# return func
# def test():
# print("i am test")
# func4(test)
# func4(test)()
##########################################################################
#3、嵌套函数的的局部作用域与全局作用域的访问顺序
x=0
def grandpa():
x=1
def dad():
x=2
def son():
x=3
print(x)
son()
dad()
grandpa()
##########################################################################
#给已知函数test1,test2添加计算函数执行时间的功能
#定义装饰器
def timer1(func):
def deco(*args,**kwargs):
start_time=time.time()
res = func(*args,**kwargs)
stop_time=time.time()
print("The func run time is %s"%(stop_time-start_time))
return res
return deco
#定义test1、test2
@timer1
def test1():
time.sleep(3)
print("I am test1")
@timer1
def test2(x):
time.sleep(4)
print("I am test2's args %s" %x)
return "I am test2"
#test1()
#test2("hello")
print(test2("hello"))
############################################################################
#定义一个登录验证的装饰器,且根据不同情况,使用不通的验证方式:local、ldap
user,passwd='andy','123abc'
def auth(auth_type):
def out_wrapper(func):
def wrapper(*args,**kwargs):
if auth_type == 'local':
username=input("Input username:")
password=input("Input password:")
if user==username and passwd == password:
print("Welcome!")
return func(*args,**kwargs)
else:
print("Wrong username or password!")
exit()
elif auth_type == 'ldap':
print("Sorry, ldap isn't work!")
return wrapper
return out_wrapper
def index():
print("welcome to index page")
@auth(auth_type="local")
def home():
print("welcome to home page")
@auth(auth_type="ldap")
def bbs():
print("welcome to bbs page") index()
home()
bbs()

python3 装饰器的更多相关文章

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

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

  2. python3 装饰器应用举例

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

  3. python3 装饰器全解

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

  4. python3 装饰器初识 NLP第三条

    还是先抄一条NLP假设... 三,有效果比有道理更重要   光说做法有道理或者正确而不顾是否有效果,是在自欺欺人. 在三赢(我好,人好,世界好)的原则基础上追求效果,比坚持什么是对的更有意义. 说道理 ...

  5. python3装饰器用法示例

    装饰器在编写后台的逻辑时有可能会用到,比方说一个场景:公司的员工想要登录自己公司的考勤记录系统去修改自己的考勤,以前是随便谁都有权限去修改,这样老板不同意了,现在,要在你登录前加一个权限验证的逻辑,如 ...

  6. python3装饰器

    由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25') ... >> ...

  7. python3 装饰器修复技术@wraps到底是什么?

    Python 装饰器中的@wraps的作用:    装饰器的作用:    在不改变原有功能代码的基础上,添加额外的功能,如用户验证等    @wraps(view_func)的作用:     不改变使 ...

  8. Python3装饰器的使用

    装饰器 简易装饰器模板 def wrapper(func): def inner(*args,**kwargs): print('主代码前添加的功能') ret=func(*args,**kwargs ...

  9. python3装饰器-进阶

    一.wraps 作用:优化装饰器 from functools import wraps # 导入wraps def wrapper(f): @wraps(f) # wraps的语法糖 def inn ...

随机推荐

  1. eclipse中搭建svn开发管理环境

    1.准备好资源 subversive,若是离线安装,已为大家准备好:http://pan.baidu.com/s/1hrbXH9y(本人喜欢离线安装,在线安装就不在此说了,其实只要一种方法简单的方法能 ...

  2. 【笔记】科普createDocumentFragment() 创建文档碎片节点

    上一篇文章说到了动态添加文本节点的方法那如果我们要添加多个文本节点或者元素节点呢? 大家可能会想到用循环然后逐个逐个添加 但是别忘了js 还提供了创建一个文本碎片的方法 createDocumentF ...

  3. window10 安装SVN 提示权限问题

     http://www.yishimei.cn/network/551.html 经常在网上看到有同学反映,他们在控制面板里卸载软件的时候,总是会出现2502.2503错误代码的问题,并且这个问题大多 ...

  4. php中环境变量

    $_ENV $_ENV是一个包含服务器端环境变量的数组.它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它.   $_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素 ...

  5. 用java代码手动控制kafkaconsumer偏移量

    为应对消费结果需要存储到关系数据库中,避免数据库down时consumer继续消费的场景 http://kafka.apache.org 查了很多源码都记录下来,省的下次还要过滤源码. //如果将结果 ...

  6. win7下matlab2016a配置vlfeat

    1.下载vlfeat http://www.vlfeat.org/ 2.解压到了matlab安装目录的toolbox下 3.打开vs2013的这个 4.输入nmake version  查看我的版本是 ...

  7. [转]hibernateTools工具安装及使用总结(eclipse 3.6)

    转载地址:http://blueblood79.iteye.com/blog/773177 最近项目采用flex+spring+hibernate的框架开发,之前虽说有多年的Java开发经验了,但是一 ...

  8. ubuntu下安装JDK并搭建activeMQ

    1.安装JDK,网上有人说activeMQ支持持JDK1.7及以上版本,未实际测试,保险起见我这里直接安装JDK1.7. #apt-get install openjdk--jdk 2.设置环境变量 ...

  9. HTML5的新增方法

    json的新增方法: parse()   将JSON转换为字符串:必须是严格的JSON格式: 用法 : var s = {"name":"name"}; JSO ...

  10. jQuery的deferred对象学习

    #copy { background-color: lightgreen; padding: 15px; margin: 10px } 一.deferred对象简介 deferred对象是jquery ...