装饰器

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

原则:

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. Linux 系统网络问题处理集[包含VM处理]

    1.1. 新操作系统ping不同主机: 检查Linux服务器网段是否有etho的IP 查看/关闭防火墙 查看:service iptables status 关闭:service iptables s ...

  2. jq双日历--最终版(功能兼容IE5,样式兼容IE6)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. django admin后台插件:django-suit入门

    去年9月底开始用django来做公司内部项目,开始对django有了一些了解,感觉django真的蛮强大的(也有很多人推荐flask,将来有空的话我会试试).今天的话只是介绍一个小东西,django管 ...

  4. MVC5新特性(一)之RouteAttribute打造自己的URL规则

    1.RouteAttribute概述 RouteAttribute的命名空间是System.Web.Mvc,区别与web api的RouteAttribute(它的命名空间是System.Web.Ht ...

  5. Microsoft visual c++ 14.0 is required问题

    错误信息: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Too ...

  6. PAT——1065. 单身狗

    “单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的对数:随后N行 ...

  7. PAT——1042. 字符统计

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束( ...

  8. 【luogu P2827 蚯蚓】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2827 35分:暴力sortO(mnlogn). 80分:考虑到每次不好维护不被切的点+q,正难则反.改成维护 ...

  9. 404 Note Found 队-课堂实战-项目UML设计

    目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...

  10. 允许跨域资源共享(CORS)携带 Cookie (转载)

    如何让CORS携带Cookie CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing).默认浏览器为了安全,遵循“同源策略”,不允许 Aj ...