Python学习笔记九:装饰器,生成器,迭代器
装饰器
本质是函数,装饰其他函数,为其他函数添加附加功能
原则:
1不修改原函数的源代码
2不修改原函数的调用方式
知识储备:
1函数即变量
使用门牌号的例子说明函数,调用方式与变量一致
2高阶函数
bar()
bar(内存地址门牌号,指针)
例子:在不修改源码的情况下附加功能,把一个函数当做实参传给另一个函数,返回值中包含函数名
3嵌套函数
在函数体中定义新函数,注意调用方式与作用域
利用高阶函数和嵌套函数实现装饰器的效果
几种情况,从简单到复杂:
被装饰函数无参数
被装饰函数多参数
被装饰函数有返回值
对于不同函数,采用不同认证方式:给装饰器传参
匿名函数
lambda
calc = lambda x : x*3
calc()
生成器
列表生成式:[i*2 for I in range(10)]
使代码简洁
一面循环一面计算的机制:generator
1将列表生成式的[]改为()
只有在调用时才会生成相应数据,只能循环顺序访问,不能切片随机访问,只记住当前位置
2加yield声明
例:斐波那契数列
a, b = b, a+b 含义是tuple
想返回哪个值就加yield声明,作用是中断,返回当前状态的值,可以在计算过程中加入其他动作
使用__next(),next()调用
捕获异常try
生成器并行计算
生产者、消费者模型
yield:保存当前状态,返回,__next()返回此状态
send(x):给yield传值
单线程下的并行效果(协程)
必须先__next执行
迭代器
可迭代对象:Iterable,from collections import Iterable
isinstance([],Iterable)
可以被next()调用并不断返回下一个值的对象称为迭代器Iterator
from collections import Iterator
list, dict, str等使用iter()转换为迭代器:iter([])
迭代器的计算在需要返回下一个数据时才进行,3.0的for就是迭代器
内置函数(查看文档全面学习)
abs()
all(iterable):全为真,返回True
any(iterable):任意一个为真,返回True
ascii(object):将一个对象转换成一个字符串的表现形式
bin(x):将数字转换成二进制表现形式,例如:’0b011’
bool([x]):判断真假
bytearray(source, encoding, errors):可修改的二进制字节格式(实际是一个二进制列表?),必须使用ASCII赋值(以数字赋值)
二进制格式以b开头
a=bytes(“abcdef”,encoding=”utf-8”)
b=bytearray(“abdef”,encoding=”utf-8”)
print(b[0]):97
b[0]=100
print(b)
bytes():创建二进制流
callable([]):是否可调用,后面可以加括号的可调用
chr(i):返回数字的ASCII对应字符
ord(c):返回字符对应的ASCII数字
classmethod(function):类方法
compile(…):底层用于代码编译
complex():复数
delattr():面向对象用
dict():生成一个默认字典{}
dir(a):查看变量的方法
divmod(a,b):返回商和余数
enumerate()
eval():字符串变为字典
filter(func,iterable):与lambda结合使用,过滤出一组数据中想要的内容
(lambda n: print(n))(5)
或者
calc = lambada n: print(n)
calc(5)
lambda n: 3 if n<4 else n
res = filter(lambda n:n>5,range(10))
for i in res:
print(i)
map:将列表的每一个值进行处理
res = map(lambda: n: n*n,range(10))
for i in res
print(i)
reduce:累计运算
import functools
res = functools.reduce(lambda x,y:x+y,range(10))
print(res)
float:
format:
frozeset([iterable]):创建不可变集合
globlals():返回当前文件所有变量的键值对
hash(object):将对象变成固定的映射关系,hash(‘alex’)
hex(x):将数字转换为十六进制,0x开头
id(object):返回内存地址
locals():打印局部变量
max([]),min([]):列表最大值最小值
oct(x):转换为八进制,0c开头
pow(x,y):x的y次方
repr(object):用字符串表示对象
reversed():反向排序
round(x,y):截断还是四舍五入?
slice(x,y):切片
sorted(iterable[, key]):排序,sorted(a.items(), key = lambda x:x[1])按照value排序(a是一个字典(无序))
vars([object]):返回对象中所有变量的列表
zip():拼接两个列表
__import__(name):只知道模块字符串格式时进行导入
Python学习笔记九:装饰器,生成器,迭代器的更多相关文章
- Python学习笔记:装饰器
Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- python学习笔记之装饰器、生成器、内置函数、json(五)
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面 ...
- Python学习笔记012——装饰器
1 装饰器 1.1装饰器定义 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator). 1.2 装饰器分类 装饰器:函数装饰器,类装饰器,函数的装饰器,类的装饰器 装饰器:函数装饰函 ...
- python学习笔记:装饰器2
python的装饰器本质是函数,为了不改变装饰目标函数内部代码而增加额外功能而存在 一.一般装饰函数实例: import datetime def func_name(func):#定义一个装饰函数, ...
- Python学习日记(九) 装饰器函数
1.import time a.time.time() 获取到当前的时间,返回值为浮点型 import time print(time.time()) #1565422783.6497557 b.ti ...
- python学习笔记之装饰器、递归、算法(第四天)
参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...
- Python学习笔记之装饰器原理
def decorator(fn): def wrapper(): print("询价") fn() print("购买成功!") return wrapper ...
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
- Python学习笔记九
Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...
随机推荐
- Linux 系统网络问题处理集[包含VM处理]
1.1. 新操作系统ping不同主机: 检查Linux服务器网段是否有etho的IP 查看/关闭防火墙 查看:service iptables status 关闭:service iptables s ...
- jq双日历--最终版(功能兼容IE5,样式兼容IE6)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- django admin后台插件:django-suit入门
去年9月底开始用django来做公司内部项目,开始对django有了一些了解,感觉django真的蛮强大的(也有很多人推荐flask,将来有空的话我会试试).今天的话只是介绍一个小东西,django管 ...
- MVC5新特性(一)之RouteAttribute打造自己的URL规则
1.RouteAttribute概述 RouteAttribute的命名空间是System.Web.Mvc,区别与web api的RouteAttribute(它的命名空间是System.Web.Ht ...
- Microsoft visual c++ 14.0 is required问题
错误信息: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Too ...
- PAT——1065. 单身狗
“单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的对数:随后N行 ...
- PAT——1042. 字符统计
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束( ...
- 【luogu P2827 蚯蚓】 题解
题目链接:https://www.luogu.org/problemnew/show/P2827 35分:暴力sortO(mnlogn). 80分:考虑到每次不好维护不被切的点+q,正难则反.改成维护 ...
- 404 Note Found 队-课堂实战-项目UML设计
目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...
- 允许跨域资源共享(CORS)携带 Cookie (转载)
如何让CORS携带Cookie CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing).默认浏览器为了安全,遵循“同源策略”,不允许 Aj ...