1. 装饰器

  • 装饰器本身就是函数,功能是为其他函数添加附加功能
  • 装饰器的设计原则:

(a). 不修改被修饰函数的源代码;

(b). 不修改被修改函数的调用方法。

  • 装饰器=高阶函数+函数嵌套+闭包
  • 装饰器框架
 def timmer(func):
def wrapper():
func()
return wrapper
func = timmer()
func()

2. 装饰器实例1:计算被修饰函数的运行时间

 import time
def bin(name,age):
time.sleep(3)
print("I am %s, I am %s years old" %(name,age))
time.sleep(3)
def timer(func):
def wrapper(*args,**kwargs):
star = time.time()
func(*args,**kwargs)
stop = time.time()
res = stop-star
return res
return wrapper
bin = timer(bin) #相当于wrapper = timer(bin)
dif_time = bin("alex",18) #相当于dif_time = wrapper("alex",18)
print("被修饰函数的运行时间为%s" %dif_time) """
运行结果:
I am alex, I am 18 years old
被修饰函数的运行时间为6.001323223114014
""" 

3. 装饰器实例2:登录界面添加身份认证功能

 user_list = [{"name":"stephen","passwd":""},
{"name": "klay", "passwd": ""},
{"name": "durant", "passwd": ""},
{"name": "green", "passwd": ""}]
def home(name):
print("Welcome %s to enter the system" %name)
def certification(func):
def wrapper(name):
passwd = input("please enter your password:").strip()
for item in user_list:
if item["name"]==name and item["passwd"]==passwd:
func(name)
return 1
return 0
return wrapper
home = certification(home) #相当于wrapper = certification(home)
res = home("klay") #相当于wrapper("klay")
if not res:
print("密码或用户名输入错误") """
运行结果:
please enter your password:123
Welcome klay to enter the system
"""

day04.4-装饰器的更多相关文章

  1. python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)

    s12-20160123-day04 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  2. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  3. day04 迭代器&生成器&装饰器

    目录   1.迭代器 2.生成器 3.推导式 4.匿名函数 5.内置函数 6.递归 7.闭包 8.装饰器 一.迭代器 特点: 1. 省内存 2. 只能向前. 不能反复 3. 惰性机制 让不同的数据类型 ...

  4. Day04:函数参数、对象、嵌套、闭包函数和装饰器

    上节课复习:    1.什么是函数        函数就是具备某一功能的工具    2.为何用函数        1.程序的组织结构和可读性        2.减少代码冗余        3.扩展性强 ...

  5. day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数

    回顾下上次的内容 转码过程: 先decode  为 Unicode(万国码 ) 然后encode 成需要的格式     3.0 默认是Unicode  不是UTF-8 所以不需要指定  如果非要转为U ...

  6. Python之路【第五篇】: 函数、闭包、装饰器、迭代器、生成器

    目录 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之可迭代对象 函数之迭代器 函数之生成器 面向过程的程序设计思想 一.函数进阶之函数对象 1. 函数对象 秉承着 ...

  7. Python 装饰器的形成过程

    装饰器  定义:本质是函数,(装饰其他函数),即为其他函数添加附加功能.  原则: 1.不能修改被装饰的函数的源代码:            2.不能修改被装饰的函数的调用方式. 实现装饰器知识储备: ...

  8. python3.x 基础三:装饰器

    装饰器:本质是函数,用于装饰其他函数,在不改变其他函数的调用和代码的前提下,增加新功能 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 3.装饰函数对于被装饰函数透明 参考如 ...

  9. Python高手之路【四】python函数装饰器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

  10. python装饰器

    今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...

随机推荐

  1. .NET 等宽、等高、等比例、固定宽高生成缩略图 类

    #region 根据原图片生成等比缩略图 /// <summary> /// 根据源图片生成缩略图 /// </summary> /// <param name=&quo ...

  2. ServletContextListener中@Autowired失效的解决方法

    @WebListener public class ContextWebListener implements ServletContextListener { @Override public vo ...

  3. 02.全文检索和数据库like的区别

    全文检索主要应用领域:搜索引擎(百度,搜狗).站内搜索(微博搜索).电商网站(京东,淘宝) 现在不缺乏做java的人,但是缺乏有互联网背景的做Java的人.具有互联网技术的Java人才.比如说大数据, ...

  4. eclipse插件jd-eclipse的使用

    https://blog.csdn.net/u013215289/article/details/51275527

  5. 各种异常 及异常类和Object类 Math类

    Day05 异常 Object类 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较.Object类中的equals方法内部使用的就是==比较运算符. 2. 描述人这个 ...

  6. 相机IMU融合四部曲(二):误差状态四元数详细解读

    相机IMU融合四部曲(二):误差状态四元数详细解读 极品巧克力 前言 上一篇文章,<D-LG-EKF详细解读>中,讲了理论上的SE3上相机和IMU融合的思想.但是,还没有涉及到实际的操作, ...

  7. 面向对象的JavaScript-001

    一. Question是父类,MultipleChoiceQuestion和DragDropQuestion是子类 二. 1. <script> // 面向对象 function Ques ...

  8. Boost::lexical_cast类型转换

    1.字符串->数值 C++代码 #include <boost/lexical_cast.hpp> #include <iostream> int main() { us ...

  9. [C++] Type Conversion(类型转换)

    Type Conversion(类型转换) Two kinds of type conversion explict type conversion(显式类型转换) impict type conve ...

  10. [SoapUI] JsonPath is to JSON what XPath is to XML

    1.通过JsonUtil验证Json的有效性 2.两种方式通过JPath读取Json的内容