装饰器

本质是函数,装饰其他函数,为其他函数添加附加功能

原则:

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学习笔记九:装饰器,生成器,迭代器的更多相关文章

  1. Python学习笔记:装饰器

    Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...

  2. python学习笔记(五):装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

  3. python学习笔记之装饰器、生成器、内置函数、json(五)

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面 ...

  4. Python学习笔记012——装饰器

    1 装饰器 1.1装饰器定义 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator). 1.2 装饰器分类 装饰器:函数装饰器,类装饰器,函数的装饰器,类的装饰器 装饰器:函数装饰函 ...

  5. python学习笔记:装饰器2

    python的装饰器本质是函数,为了不改变装饰目标函数内部代码而增加额外功能而存在 一.一般装饰函数实例: import datetime def func_name(func):#定义一个装饰函数, ...

  6. Python学习日记(九) 装饰器函数

    1.import time a.time.time() 获取到当前的时间,返回值为浮点型 import time print(time.time()) #1565422783.6497557 b.ti ...

  7. python学习笔记之装饰器、递归、算法(第四天)

    参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...

  8. Python学习笔记之装饰器原理

    def decorator(fn): def wrapper(): print("询价") fn() print("购买成功!") return wrapper ...

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

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

  10. Python学习笔记九

    Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...

随机推荐

  1. eclipse直接使用tomcat安装程序的webapp目录调试

    感谢此文:http://blog.csdn.net/soszou/article/details/23673133 本文很多技术及操作来源于此文 需求:因为微信方面的开发调试.为了测试方便,直接构建了 ...

  2. SVN图标不显示的解决几种方式

    系统安装的Tortoise SVN,不知道是不是安装了其他软件的缘故,造成SVN客户端功能可以正常使用,就是文件夹或文件的左下角不显示图标.故上网查找解决方法: 方法一: 升级到最新版本,基本是没用的 ...

  3. 计算机支持的最大内存与CPU之间的关系

    在使用计算机时,其最大支持的内存是由  操作系统 和 硬件 两方面决定的. 先说一下硬件方面的因素,在计算机中 CPU的地址总线数目 决定了CPU 的 寻址 范围,这种由地址总线对应的地址称作为物理地 ...

  4. HDU 1542 矩形面积并

    推荐阅读这篇文章 这里仅根据上述文章进行一些补充.主要是注意这里线段树点的意义变成了“边”.比如+-----+-----+,看作3个点abc和两条边e1和e2,那么线段树中点a代表e1,点b代表e2. ...

  5. java多线程--实现Runnable接口方式

    因为java类只能继承一个类可以实现多个接口的特性,所以一般情况下不推荐使用继承Thread类实现多线程,下面是实现Runnable接口方式的简单多线程代码 package text; /** * 多 ...

  6. python中的类(二)

    python中的类(二) 六.类的成员 字段:普通字段,静态字段 eg: class Province(): country=’中国’ #静态字段,保存在类中,执行时可以通过类或对象访问 def __ ...

  7. [19/04/29-星期一] GOF23_行为型模式(责任链模式、迭代器模式)

    一.行为模式 二.责任链模式(chainOfResponsibility) [一个请求类] /*** 请假类 * 封装请假的基本信息 */ package cn.sxt.chainOfResponsi ...

  8. 【转】CopyOnWriteArrayList

    初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList,是在研究JDBC的时候,每一个数据库的Driver都是维护在一个CopyOnWriteArrayLis ...

  9. SpringMVC整合FreeMarker实例

    FreeMarker作为模板引擎,是比较常用的. FreeMarker官方文档地址为:https://freemarker.apache.org/ 现在浏览器或者翻译工具这么多,对于英文方面,我想大多 ...

  10. 安装IIS步骤图解

    这几日好些网友来找iis安装包,但是因为新浪爱问的共享资料已关闭导致下载链接不可用,笔者在新浪微盘的备份资料只有5.1版,现共享链接如下: IIS5.1 for windows xp下载链接http: ...