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 ...
随机推荐
- AJPFX辨析Java中堆内存和栈内存的区别
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...
- I/O————对象流
对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 一个对象以流的形式进行传输,叫做序列化. 该对象所对应的类,必须是实现Serializable接口 对象的序列化与反序列化就是从文件 ...
- MySQL连表Update修改数据
设想两张表,如下 table A field id field name table B field id filed my_name 现在希望将表B中的my_name中的内容“拷贝”到表A中对应的n ...
- 【Troubleshooting Case】Exchange Server 组件状态应用排错?
在Exchange 2013中,引入了“服务器组件状态”的概念.服务器组件状态从运行环境的角度提供对组成Exchange Server的组件的状态的精细控制. 日常排错时,常常会把Exchange 服 ...
- HDU 2089 不要62 (数位DP,入门)
题意: 只要含连续的62,或者含4的车牌号码都是不吉利的,其他都是吉利的组合.问区间[L,R]中有多少个数是吉利的? 思路: 依然是利用树(10进制是十叉树)的思想,统计左边所有子树有多少个数是吉利的 ...
- asp页面无法访问,可尝试开始SQL Server等服务
存在问题 asp页面的英文提示,翻译后为: "一个错误发生在服务器在处理URL.请联系系统管理员(管理人).如果您是系统管理员,请点击这里了解更多关于这个错误." 解决方案 请 ...
- Beta冲刺(周四)
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作业要求在哪里 https://edu.cnblo ...
- python_90_hashlib模块
#用于加密相关的操作,3.x里代替了2.x中的md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib ...
- 关于java字符串常量池
今天发现一个好玩的东西 public static void main(String[] args) { String str1 = new StringBuilder(" ...
- helm install
reference 前提:已安装k8s:v1.10.4 helm install on master(无需下载官方tar包) 链接:https://pan.baidu.com/s/1Ji3Ru1pTQ ...