Python小知识点(3)--装饰器

(1)装饰器含参数,被装饰函数不含(含)参数

实例代码如下:

import time
# 装饰器函数
def wrapper(func):def done(*args,**kwargs):start_time = time.time()func(*args,**kwargs)stop_time = time.time()print('the func run time is %s' % (stop_time - start_time))return done
# 被装饰函数1
@wrapper
def test1():time.sleep(1)print("in the test1")
# 被装饰函数2
@wrapper
def test2(name):    #1.test2===>wrapper(test2)   2.test2(name)==dome(name)time.sleep(2)print("in the test2,the arg is %s"%name)
# 调用
test1()
test2("Hello World")

(2)装饰器含有参数,被装饰函数含(不含)参数

import time
user,passwd = 'admin','admin'
def auth(auth_type):print("auth func:",auth_type)def outer_wrapper(func):def wrapper(*args, **kwargs):print("wrapper func args:", *args, **kwargs)if 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 homeprint("---after authenticaion ")return reselse:exit("\033[31;1mInvalid username or password\033[0m")elif auth_type == "ldap":print("ldap链接")return wrapperreturn outer_wrapper
@auth(auth_type="local") # home = wrapper()
def home():print("welcome to home  page")return "from home"
@auth(auth_type="ldap")
def bbs():print("welcome to bbs  page"
print(home()) #wrapper()
bbs()

总结:

(1)装饰器实质为函数内嵌,返回函数地址。

(2)装饰器带参数与不带参数相比装饰器带参数的多了一层函数定义用于接收装饰器中传递的参数,其余基本相同。

(3)先验证装饰器中的参数,在验证普通函数的参数

小知识:

列表生产式:[i for i in range(5)]---->[0,1,2,3,4,5]

生成器与迭代器:

第一种方式通过括号的方式生成

生成器:()---(i for i in range(5))  ==>generator

这种一边循环一边计算的机制,称为生成器:generator。

生成器只有在调用时才会生成相应的数据,只记录当前位置。

只有一个__next__()方法

第二种方式通过yield生成

在函数中使用yield即可将一个函数变为一个生成器

迭代器:

直接作用于for循环的数据类型:

一类是集合数据类型,如list、tuple、dict、set、str等;

一类是generator,包括生成器和带yield的generator function。

直接作用于for循环的对象统称为可迭代对象:Iterable。

可以使用isinstance()判断一个对象是否是Iterable对象

from collections import Iterable

isinstance([], Iterable)=========true

*可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

可以使用isinstance()判断一个对象是否是Iterator对象:

>>> from collections import Iterator

>>> isinstance((x for x in range(10)), Iterator)

======>True

生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。

把list、dict、str等Iterable变成Iterator可以使用iter()函数:

例如:iter([])<====迭代器

Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

小结:

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

posted on 2018-08-05 12:24 WFaceBoss 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/wfaceboss/p/9425128.html

Python小知识点(3)--装饰器相关推荐

  1. c语言装饰,C/C++知识点之装饰器模式(Decorator) C++

    本文主要向大家介绍了 C/C++知识点之装饰器模式(Decorator) C++,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.装饰器模式是比较常用的一种设计模式,Python中就 ...

  2. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解

    我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...

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

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

  4. Python小知识点(5)--面向对象部分

    Python小知识点(5)--面向对象部分 面向对象: 世间万物,皆可分类.--------------------手机<--------------某一个分类 世间万物,皆为对象.------ ...

  5. python return用法_初学Python要了解什么 装饰器知识汇总有哪些

    初学Python要了解什么?装饰器知识汇总有哪些?在Python学习过程中,有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用,比 ...

  6. python log函数_python装饰器的使用

    1. 装饰者模式 装饰者模式是常用的软件设计模式之一.通过此设计模式,我们能够在不修改任何底层代码情况下,给已有对象赋予新的职责.python中可以用装饰器简单地实现装饰者模式. 1.1 将函数作为参 ...

  7. [转载] Python学习笔记——用装饰器decorator和Memoization记忆化提高效率,原理讲清楚了

    参考链接: 在Python中使用装饰器进行记忆 Python学习笔记--用装饰器decorator和Memoization记忆化提高效率 装饰器Memoization记忆化运用`functools`中 ...

  8. itext生成pdf paragraph 自动换行_reportlab高级制作多格式PDF和python的class和装饰器复习

    1 说明 1.1 reportlab高级制作多格式PDF:即包含文字.表格.柱状图. 1.2 复习python的class和装饰器的高级基础知识. 1.3 列表转换字符串.读取txt文件等python ...

  9. Python中的decorator装饰器使用方法

    装饰器的运用是Python编程中的一项高级技巧,这里由浅入深,整理了12步入门Python中的decorator装饰器使用方法,需要的朋友可以参考下 装饰器(decorator)是一种高级Python ...

最新文章

  1. oracle数据库性能优化 - 降低IO
  2. StaticLinkList
  3. mmap 内存映射详解
  4. python实现监控增量_python 日志增量抓取实现方法
  5. Mysql 数据库导入导出
  6. 红橙Darren视频笔记 启动不在清单文件注册的activity 安卓8有效
  7. goip技术原理图解_图解电工识图一看就懂
  8. 试题12 交叉排序(小-大,大-小)
  9. BZOJ3209(luogu 4317)花神的数论题题解
  10. MySQL学习十四创建和操纵表
  11. 阿里这份Java程序性能优化指南,让你的程序快上200%
  12. Cisco ASA 5505 (Version 9.X)的 LAN上网和NAT的配置
  13. wifi678响应超时服务器无应答,Win8宽带连接出现错误678的处理方法
  14. Chrome清理网页缓存
  15. 论文页码不连续?经常改不对?教你一招立马解决
  16. 【006】- Django模型数据操作(二)
  17. 今日分享——《青春》(李大钊)
  18. php显示cpu温度,cpu温度过高怎么办
  19. RNN、RNNCell
  20. 自学python(2):利用opencv实现读图,显示,画框,裁剪的python代码

热门文章

  1. AI破解脑电波,准确率超80%!高度还原你眼中最美的ta
  2. 蝙蝠为啥这么厉害?地球人整明白了没有?
  3. 这才是未来真正的风口,一文看清13种硬科技投资趋势
  4. 5分钟,看尽芯片和摩尔定律“你追我赶”的抗衡50年
  5. 道阻且长,Libra 项目负责人长文回应一切质疑
  6. 雁栖湖会议研讨:计算机能代替程序员吗?
  7. 特朗普即将主持AI会议 中美竞争成焦点
  8. AI与基因科学的对话:从“人工智能”到“动物智能”
  9. 深度睡眠中,记忆如何被保持?
  10. 全球研发开支排名:亚马逊第一,BATJ排不上号!