1.装饰器

1. 不能修改被装饰的函数的源代码
  2. 不能修改被装饰的函数的调用方式

  实现装饰器知识储备:
    1 函数即“变量”
    2 高阶函数
         a:把一个函数名当做实参传给另外一个函数(不修改被装饰函数源代码)
         b:返回值中包含函数名(不修改函数的调用方式)
    3嵌套函数

装饰器 想了很久过两天代码实现

列表生成式:

a=[i if i<5 else i*i for i in a]

2.生成器

为什么会有这个功能?

答:我们可以使用列表储存数据,可当我们的数据特别大的时候,建立了列表是很占内存,生成器他可以先创建数据,但不用,你需要时用,要几个拿几个。

A简单的生成器

a=( x for x in range(10))
next(a)
#写一次next输出一个数

next(a)会一直表示出a中数据直到没有,且不可以回退。

B.用函数写的生成器

yield

b把函数的执行过程冻结在这一步,并且把b的值,返回给外面的next()

next()唤醒冻结的函数

代码如下:

def fib(max) :
n,a,b=0,0,1
while n<max:
print("nice")
yield b
a,b=b,a+b
n+=1
return 'done'
f=fib(15)
next(f)

代码执行到yield b 这里停了,外面调用一次next(f),继续走。再次调用 会继续走,直到遇到下一个yield 通过next()唤醒。

运行到完程序会报错,这是正常的。

函数有了YIELD之后

1.函数名加()就得到了一个生成器

2.return在生成器里,代表生成器的中止,直接报错

2.生成器send方法

A.唤醒并继续执行

B.发送一个信息到生成器内部

代码如下:

def range2(n) :
count=0
while count<n:
print(count)
count+=1
sign=yield count
if sign='stop' :
print(sign)
return 1111
new_range=range2(3)
new_range.send("stop")

程序走到yield 返回消息到外面可next 可接受 send的消息 作出继续或停止的操作。

3.迭代器(可循环的)

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

iterable可迭代类型

isinstance(1.iterable)
isinstance('abc',iterable) #结果是:false true

迭代器:可以被next()函数调用并不断返回下一个值得对象成为迭代器 iterator

所有生成器也是迭代器

为什么:list,str dict是可迭代对象,但却不是迭代器?

python中,iterator对象表示的是一个数据流,iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时STOPITERATION错误,可以把这个数据流,看作是一个有序序列,但是我们却不可以提前知道序列的长度,只能不断通过next()函数实现 按需计算下一个数据,所以iterator的计算式惰性的,只有在需要返回 下一个数据时,他才会计算,而dict,list这些都是有大小,长度的所以不是iterator1

python大法好——装饰器、生成器、迭代器的更多相关文章

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

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

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

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

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

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

  4. python 函数之装饰器,迭代器,生成器

    装饰器 了解一点:写代码要遵循开发封闭原则,虽然这个原则是面向对象开发,但也适用于函数式编程,简单的来说,就是已经实现的功能代码不允许被修改但 可以被扩展即: 封闭:已实现功能的代码块 开发:对扩张开 ...

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

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

  6. python 有参装饰器与迭代器

    1.有参装饰器 模板: def auth(x): def deco(func): def timmer(*args,**kwargs ): res = func(*args,**kwargs ) re ...

  7. Python之路第四天,基础(4)-装饰器,迭代器,生成器

    装饰器 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象 ...

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

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

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

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

随机推荐

  1. scott用户不存在

    用的Oracle版本是12c,在解锁scott时提示用户不存在,于是搜解决方法,给出了两种方法: 一种是加载scott.sql文件(我的scott.sql文件是存在的,在Oracle安装目录下搜索一下 ...

  2. 学号 20175223 《Java程序设计》第1周学习总结

    学号 20175223 <Java程序设计>第1周学习总结 教材学习内容总结 第一章要点: 要点1:Java的三大平台:Java SE,Java EE,Java ME. 要点2:Java的 ...

  3. python 使用jinjia2 生成文件的空格处理

    例如: <div> {% if True %} yay {% endif %} </div> 生成文件为 <div> yay </div> 两种方法解决 ...

  4. day 08 字符编码和文件的读写操作

    打开文件的语法 f=open("test.txt",encoding=:"utf-8") #给系统发送一个指令,让操作系统去打开文件 使用上面的方法打开文件的方 ...

  5. C#读写三菱PLC和西门子PLC数据 使用TCP/IP 协议

    本文将使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能 ...

  6. 解决使用angular2路由后,页面刷新后报404错误。

    点击路由链接跳转页面是正常的,但是当刷新页面时就出现了404错误. 解决方法如下: 在app.module.ts中添加import: import {HashLocationStrategy,Loca ...

  7. 慢工出细活 JS 等待加载效果

    实例可以直接运行查看效果.很方便快捷 <html> <head> <meta http-equiv="content-Type" content=&q ...

  8. javax/servlet/jsp/jstl/core/Config

    javax/servlet/jsp/jstl/core/Config springmvc出现的问题. 尝试了各种jar,问题依旧. DispatcherServlet配置如下. <bean id ...

  9. [LeetCode&Python] Problem 674. Longest Continuous Increasing Subsequence

    Given an unsorted array of integers, find the length of longest continuousincreasing subsequence (su ...

  10. Ubuntu16.04交叉工具链安装

    前言: 开发环境是64位的ubuntu16.04,交叉工具链是通过sudo apt-get install ....安装的,移植uboot2014.10,但是很奇怪,按照网上的介绍在start.s里面 ...