day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数
回顾下上次的内容

下面开始讨论装饰器
先写一个基础函数:

所以装饰器的原则:
先来看函数式怎么定义,怎么运行的:
函数只有在调用运行的时候才会去找定义的函数:

函数体 就是一堆字符串,没有任何功能,我们在定义的时候只是把这一堆字符串放到了一个内存空间里。

这里说一下解释器回收内存的机制:
门牌号没有的情况下就会清理房间
当然也有匿名函数:

没有引用,立刻删除


高阶函数的使用案例:


所以是这样写的:

说到这里我们要复习一下作用域:

真正开始装饰器:

把deco的内存地址赋予给原来的函数,再运行deco 函数
总结一下:



装饰器的传入参数:



实践: 这种的装饰器可以满足日常90% 的需求了。
#!/usr/bin/env python3
# Auth: Shen Yang
import time
#基础
#-------------------
def test1():
time.sleep(2)
print("in the test1")
#test1()
def test2(name):
print("hehe",name)
#test2()
#-------------------
#定义一个装饰器函数
def timer(func): #定义一个传入参数
def deco(*args,**kwargs): #定义一个内嵌函数,实现新功能
start_time = time.time()
func(*args,**kwargs)
stop_time = time.time()
print("The func run time is {_time}".format(_time=stop_time-start_time))
return deco #返回deco 临时函数的内存地址,从外面调用
@timer #test1 =timer(test1)
def test1():
time.sleep(2)
print("in the test1")
@timer #test2 =timer(test2("Wang Lu"))
def test2(name):
print("hehe",name)
test1()
test2("Wang Lu")


把列表生成器变成一个生成器








把函数改为生成器:

异常处理:


生成器

list2 = (i*3 for i in range(10))
print(list2.__next__())
print("chulai1")
print(list2.__next__())
print("chulai2")
print(list2.__next__())
print("chulai3")
print(list2.__next__())

函数:
def gent(max):
n,a,b = 0,0,1
while n < max:
print(b)
a,b = b,a + b
n = n + 1
return "Over"
gent(10)
变成生成器:
def gent(max):
n,a,b = 0,0,1
while n < max:
yield (b)
a,b = b,a + b
n = n + 1
return "Over"
flb = gent(10)
print(flb.__next__())
print(flb.__next__())
print(flb.__next__())
print(flb.__next__())

使用return 返回错误:
def gent(max):
n,a,b = 0,0,1
while n < max:
yield (b)
a,b = b,a + b
n = n + 1
return "Over"
flb = gent(10)
while True:
try:
a = flb.__next__()
print("this is ",a)
except StopIteration as err:
print("Error in ",err.value)
break



def consumer(name):
print("{_name}准备吃包子哈".format(_name=name))
while True:
baozi = yield
print("做出了{_baozi}的包子,被{_name}吃啦".format(_baozi=baozi,_name=name)) c = consumer("Wanglu")
c.__next__()
c.send("韭菜馅") #和__next__ 效果一样,但是给 yield 传入了参数

import time
def consumer(name):
print("{_name}准备吃包子哈".format(_name=name))
while True:
baozi = yield
print("做出了{_baozi}的包子,被{_name}吃啦".format(_baozi=baozi,_name=name))
def producer():
c = consumer("王璐")
c1 = consumer("申嘉锐")
c.__next__()
c1.__next__()
print("开始做包子了!!!")
for i in range(1,10):
time.sleep(1)
print("做了个包子,分两半来吃吧")
c.send(i)
c1.send(i)
producer()


迭代器 和 可迭代对象 不是一回事



把 list dic str 变为迭代器



any() 任意一个为真就返回真,如果为空返回False
ascii() 吧内存的对象转换为可打印的字符串
bin() 十进制整数转为二进制 有用
bytes()
bytearray() 可修改的二进制
callable() 判断是否可调用
chr() 返回aiscll 码对应的字符
ord() 返回aiscll 位置对应的序号
compile()


filter() 一组数据中过滤出满足条件数据。

map() 对传入的每一个值进行处理,返回相应的结果 和列表生成器 一样的
reduce() 需要import functools
frozenset() 编程一个不可变集合
globals() 以key value 形式返回整个文件中变量
hex() 16进制转换
zip() 拉链,一拉就和到一起了

如果有多的或者少的按少的算:

__import__() 非常有用: 导入字符串的模块

序列化:

反序列化:

json 只能处理简单的数据类型,如函数啊 类啊 就报错


找其他目录的程序并运行


绝对路径:

动态添加环境变量,才能import

day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数的更多相关文章
- Python之路-python(装饰器、生成器、迭代器、Json & pickle 数据序列化、软件目录结构规范)
装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能 原则: 1.不能修改被装饰的函数的源代码. 2.不 ...
- 装饰器、生成器,迭代器、Json & pickle 数据序列化
1. 列表生成器:代码例子 a=[i*2 for i in range(10)] print(a) 运行效果如下: D:\python35\python.exe D:/python培训/s14/day ...
- Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化
一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...
- 迭代器/生成器/装饰器 /Json & pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- python基础6之迭代器&生成器、json&pickle数据序列化
内容概要: 一.生成器 二.迭代器 三.json&pickle数据序列化 一.生成器generator 在学习生成器之前我们先了解下列表生成式,现在生产一个这样的列表[0,2,4,6,8,10 ...
- Day4 装饰器——迭代器——生成器
一 装饰器 1.1 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多 ...
- 7th,Python基础4——迭代器、生成器、装饰器、Json&pickle数据序列化、软件目录结构规范
1.列表生成式,迭代器&生成器 要求把列表[0,1,2,3,4,5,6,7,8,9]里面的每个值都加1,如何实现? 匿名函数实现: a = map(lambda x:x+1, a) for i ...
- day4装饰器-迭代器&&生成器
一.装饰器 定义:本质是函数,(装饰其他函数)就是为其它函数添加附加功能 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数及“变量” 2.高阶 ...
- python装饰器,迭代器,生成器,协程
python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...
随机推荐
- More than one fragment with the name [spring_web] was found. This is not legal ...
今天在搭建springweb应用环境的时候启动tomcat报错More than one fragment with the name [spring_web] was found. This is ...
- 开发中遇到的Cause: java.sql.SQLException: connection holder is null的异常
异常的出现是属于获取连接超时,从而找不到持有者. 项目中的配置体现: <property name="removeAbandoned" value="true&qu ...
- base-command
命令分类 自带命令 工具型 文件系统 第三方命令 CLI GUI 操作文件系统 pwd(print working directory) ls(list files) ls 列出当前目录文件 ls 目 ...
- Cocos2d-x v3.1 初识(一)
Cocos2d-x v3.1 初识(一) Cocos2d-x从以前苹果平台上的Cocos2d发展而来,版本已经更新到了3.1.1.作为一个跨平台的游戏开发引擎,现在已经被上百个国家在使用,这也是国人的 ...
- Jquery 日期差函数 修改 对火狐进行兼容
function DateDiff(sDate1, sDate2) { //sDate1和sDate2是yyyy-MM-dd格式 var aDate, oDate1, oDate2, iDays; a ...
- bt5r3开启远程登录
sshd-generate /etc/init.d/ssh restart
- mac不限速下载百度网盘
本文转载自:https://blog.csdn.net/u010837612/article/details/80029212 相信大家都比较困惑,百度网盘客户端限速后一般只有几十K的下载速度,Win ...
- 如何处理VirtualBox启动错误消息:The vboxdrv kernel module is not loaded
我在启动minikube时,遇到如下错误消息: Starting local Kubernetes v1.10.0 cluster... Starting VM... E1010 03:27:37.9 ...
- 认识CoreData—初识CoreData
http://www.cocoachina.com/ios/20160729/17245.html 这段时间公司一直比较忙,和组里小伙伴一起把公司项目按照之前逻辑重写了一下.由于项目比较大,还要兼顾之 ...
- oracle中print_table存储过程实例介绍
oracle中pro_print_table存储过程实例介绍 存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.这 ...