python大法好——装饰器、生成器、迭代器
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大法好——装饰器、生成器、迭代器的更多相关文章
- 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化
文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...
- python三大器(装饰器/生成器/迭代器)
1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 @外层函数 def ...
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
- python 函数之装饰器,迭代器,生成器
装饰器 了解一点:写代码要遵循开发封闭原则,虽然这个原则是面向对象开发,但也适用于函数式编程,简单的来说,就是已经实现的功能代码不允许被修改但 可以被扩展即: 封闭:已实现功能的代码块 开发:对扩张开 ...
- python函数、装饰器、迭代器、生成器
目录: 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象: 函数是第一类对象,即函数可以当作数据传递 ...
- python 有参装饰器与迭代器
1.有参装饰器 模板: def auth(x): def deco(func): def timmer(*args,**kwargs ): res = func(*args,**kwargs ) re ...
- Python之路第四天,基础(4)-装饰器,迭代器,生成器
装饰器 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象 ...
- Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)
Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数
- Python之路【第五篇】: 函数、闭包、装饰器、迭代器、生成器
目录 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之可迭代对象 函数之迭代器 函数之生成器 面向过程的程序设计思想 一.函数进阶之函数对象 1. 函数对象 秉承着 ...
随机推荐
- python变量进阶(可变不可变,局部变量和全局变量)
变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引 ...
- STL next_permutation 算法原理和实现
转载自:https://www.cnblogs.com/luruiyuan/p/5914909.html 目标 STL中的next_permutation 函数和 prev_permutation 两 ...
- Shell脚本的学习笔记一:变量
三种变量: 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需 ...
- 仿XP系统的任务栏菜单
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- c#的默认访问权限
1.命名空间下的元素的默认访问修饰符 public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员. internal : 同一程序集中的任何代码都可以访问该类型或成员, ...
- SQLite相关异常
SQLite的异常大多都和异常IO操作有关,这类异常通常在debug测试的时候难以发现通常和用户的操作有关系,根据我遇到的包括以下几种: 1.No transaction is active 这种情况 ...
- C# 异步通信 网络聊天程序开发 局域网聊天室开发
Prepare 本文将使用一个NuGet公开的组件技术来实现一个局域网聊天程序,利用组件提供的高性能异步网络机制实现,免去了手动编写底层的困扰,易于二次开发,扩展自己的功能. 在Visual Stud ...
- MacBook使用笔记2 - 安装windows虚拟机攻略
转载请标注原链接:http://www.cnblogs.com/xczyd/p/5498878.html 5月初从阿里滚粗,然后失去了公司发的Mac Air.说实话Mac机器确实比windows好用一 ...
- spring cloud/spring boot同时支持http和https访问
l老规矩为大家祭出原帖:https://www.cnblogs.com/lianggp/p/8136540.html 不再转述
- yii2 获取模块名、控制器名、方法名
在视图中: 模块名 $this->context->module->id控制器名 $this->context->id方法名 $this->context-> ...