emmmmm....看了好久才能大概的看懂一点关于装饰器的内容...
import sys # 引入sys模块
import time
import functools
from functools import reduce # python3中全局变量中没有了reduce函数,此函数被放进functools模块中 # 装饰器:装饰器就是一个高阶函数接受一个函数作为参数,并在内部将其进行包装,然后返回一个新的函数
def log(f):
def fn(x): #被返回的新函数
print('这是一个装饰器') # 新添加的功能
return f(x) # 返回原函数 return fn @log
def perfomance(f):
print('装饰器已经调用') perfomance(1) # 从上面可以看出,先定义好这个装饰器的功能,然后将其装饰到另一个函数上就可以了 # 以下是带参数的装饰器,emmmm,应该就是也可以使用该参数的吧...和其他普通的带参数的函数应该是一样的...
def performance(unit):
def perf_decorate(f):
def wrapper(*args, **kw): #*args是可变参数,用于元组,**kw是关键字参数,用于字典,emmm....没有理解...只知道他们都可以传递任意个参数的样子...
t1 = time.time()
r = f(*args, **kw)
t2 = time.time()
t = (t2 - t1) * 1000 if unit == 'ms' else t2 - t1 # 计算调用f函数花费的时间
print('call %s() in %f %s' % (f.__name__, t, unit))
return r return wrapper return perf_decorate @performance('ms')
def factorial(n):
return reduce(lambda x, y: x * y, range(1, n + 1)) print(factorial(10))
# 迭代器:可以记住遍历的位置的对象,基本方法有iter()和next(),如下所示:
l = [1, 2, 3, 4]
it = iter(l) # 创建迭代器对象
print(next(it)) # 输出迭代器的下一个元素
# for x in it:
# print(x) # 迭代器只能向前,所以for循环是从2开始迭代的。
''' 生成器:在python中,使用了yield的函数被称为生成器,生成器就是一个返回迭代器的函数,
只能用于迭代操作,在调用生成器运行时,每次碰到yield时函数暂停并保存当时所有的运行信息,返回yield的值。
''' def febonacci(n): # 生成器函数
a, b, counter = 0, 1, 0
while True:
if counter > n: # 当超过预想值时,停止运行,返回0
return
yield a # 函数暂停,并保存a的信息
a, b = b, a + b
counter += 1 f = febonacci(10) # f是一个迭代器,有生成器返回生成 while True:
try:
print(next(f), end=" ")
except StopIteration:
sys.exit()

py装饰器,生成器,迭代器的更多相关文章

  1. Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle

    目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...

  2. 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...

  3. python三大器(装饰器/生成器/迭代器)

    1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 @外层函数 def ...

  4. Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)

    Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数

  5. Python之装饰器、迭代器和生成器

    在学习python的时候,三大“名器”对没有其他语言编程经验的人来说,应该算是一个小难点,本次博客就博主自己对装饰器.迭代器和生成器理解进行解释. 为什么要使用装饰器 什么是装饰器?“装饰”从字面意思 ...

  6. Python装饰器、迭代器&生成器、re正则表达式、字符串格式化

    Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...

  7. 简学Python第四章__装饰器、迭代器、列表生成式

    Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群  群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...

  8. python函数、装饰器、迭代器、生成器

    目录: 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递 ...

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

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

随机推荐

  1. flask 完成简单查询请求处理,及跨域

    文章大纲 flask通用项目结构 flask 简介 主体代码逻辑 flask 跨域问题的处理 flask 日志 flask 微服务Flask-RESTful 启动服务命令 flask通用项目结构 | ...

  2. 染色dp(确定一行就可行)

    题:https://codeforces.com/contest/1027/problem/E 题意:给定n*n的方格,可以染黑白,要求相邻俩行”完全“不同或完全相同,对于列也是一样.然后限制不能拥有 ...

  3. tomcat端口占用异常

    错误记录--更改tomcat端口号方法,Several ports (8005, 8080, 8009) 2011年01月18日 01:34:00 阅读数:202700 启动Tomcat服务器报错: ...

  4. ABC:Meaningful Mean

    题目描述 You are given an integer sequence of length N, a= {a1,a2,…,aN}, and an integer K. a has N(N+1)⁄ ...

  5. python语法基础-基础-变量和数据类型

    ###############   第一个python程序   ############### print("hello python") # 打印hello python # 分 ...

  6. [LC] 45. Jump Game II

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. optogenetics|

    Bird &optogenetics&day&night 光遗传学(optogenetics)——结合遗传工程与光来操作个别神经细胞的活性,发现脑部如何产生γ波(gamma o ...

  8. inventor安装未完成,某些产品无法安装的解决方法

    inventor提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装inventor失败提示inventor安装未完成,某些产品无法安装,也有时候想重新安装inv ...

  9. 转-web自动化测试,定位不到元素的原因及解决方案

    1.动态id定位不到元素 分析原因:每次打开页面,ID都会变化.用ID去找元素,每次刷新页面ID都会发生变化. 解决方案:推荐使用xpath的相对路径方法或者cssSelector查找到该元素. 2. ...

  10. 自定义servlet重写doGet或doPost方法是如何实现多态的

    我们知道,如果我们自定义一个servlet继承HttpServlet,并且重写HttpServlet中的doGet或doPost方法,那么从浏览器发送过来的request请求将调用HttpServle ...