python3 装饰器、列表生成器、迭代器、内置方法详解等(第四周)
前言:
为什么要学习python3?
原因:
1、学习一门语言能力
2、通过该语言能力完成测试自动化以及独立完成自测框架知识
那么我要做什么呢?
1、每天花十个小时完成python3的学习
要在什么地方做呢?
深圳家里完成7天
那到底要怎么做呢?
完成基本的python3的基础知识,从而再学习测试框架
总结:
1、让我初步了解装饰器、列表生成器、迭代器、内置方法详解等内容
遗留问题:高级购物车代码未写
装饰器:
定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能
原则:
1、不能修改被装饰的函数的源代码
2、不能修改被装饰的函数的调用方式
实现装饰器知识储备:
1、函数即“变量” (字符串的形式存放)
#匿名函数
# calc = lambda x:x*3
# print(calc(3))
#看书本图
注意:
1)当一个字符串没有被任何指向时(例:x和y 都不等于1,1会被python自动内存回收)
2)python函数都是 1、定义声明 2、再调用 注(先调用后定义无效)
2、高阶函数
1) 把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
2)返回值中包含函数名(不修改函数的调用方式)
3、嵌套函数
高阶函数+嵌套函数 =》 装饰器
1 import time 2 3 def timmer(func): 4 def warpper(*args,**kwargs): 5 start_time = time.time() 6 func() 7 stop_time = time.time() 8 print("the func run time is %s" %(stop_time-start_time)) 9 return warpper() 10 11 @timmer 12 def test1(): 13 time.sleep(3) 14 print("in the test1") 15 16 test1()
列表生成器:
# 1、生成器只有在调用时才会生成相应的数据
# 2、只记录当前位置
# 3、只有一个_next_() 方法。,数据只能往前不能后退,只保留一个元素 next()
1 b = (i*2 for i in range(10)) # 最快,生成一个算法 2 for i in b: # 访问了才会开始生成 3 print(i) 4 5 #其他方式 6 [i*2 for i in range(10)] # 直接生成全部 7 #print([i*2 for i in range(10)]) 8 9 10 a = [] #最low 11 for i in range(10): 12 a.append(i*2) 13 print(a) 14 15 16 #yield的send用法 17 # f.send有三个作用或可称为三个步骤 18 #1. 将'send value'赋值给ret(注意:不是赋值给i) 19 #2. 重新启动生成器往下走 20 #3. 再执行一次next(f), 相当于函数又返回了一次值
迭代器:
#函数
isinstance() #判断一个对象是否是Iterale 对象:
next()
#可以直接作用于for循环的对象统称为 可迭代对象:判断一个对象是否是Iterale
#可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
#注意:有next()方法就叫迭代器,没有就不是 用dir() 查看可用的方法
# 凡是可作用于for循环的对象是Iterable类型(可迭代对象):
# 凡是可作用于next()函数的对象都是Iterator类型(迭代器),它们表示一个惰性计算序列:
# 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象
内置方法详解:
1 abs() 2 all() #判断所有可迭代对象是否为真, 非0就是真 3 #print(all([0,-5,3])) 4 any() #任意一个数据为真都返回真 5 #print(any([0,-5,3])) 6 ascii() #返回一个表示对象的字符串 7 bin() # 返回一个整数 int 或者长整数 long int 的二进制表示,十进制转二进制 8 bool() #判断真假 9 bytearray() # 方法返回一个新字节数组。这个数组里的元素是可变的 10 bytes() 11 callable() 12 chr() 13 ord() 14 compile() 15 delattr() # 16 dict() #生成字典 17 enumerate() 18 eval() #字符串编译字典,注:处理数据类型或加减乘除 ,有语句或者for循环只能用exec() 19 exec() #字符串转字典 处理有语句或者for循环的 20 filter() #函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换 21 float() #浮点 22 format() 23 frozenset() #不可变列表,类似元组 24 getattr() 25 globals() #返回一个全局变量的字典,包括所有导入的变量 26 hash() #用于获取取一个对象(字符串或者数值等)的哈希值 类似数据库主键对应值 27 help() #查看帮助 28 hex() #将一个指定数字转换为 16 进制数 29 input() 30 int() 31 isinstance() 32 issubclass() 33 iter() #迭代器 34 len() #字符长度 35 locals() #会以字典类型返回当前位置的全部局部变量 36 map() #会根据提供的函数对指定序列做映射,返回迭代器 37 max() #返回给定参数的最大值 38 min() #返回给定参数的最小值 39 next() #函数要和生成迭代器的 iter() 函数一起使用 40 object() 41 oct() #将一个整数转换成 8 进制字符串,8 进制以 0o 作为前缀表示 42 open() #用于打开一个文件,并返回文件对象 43 ord() 44 pow() #返回 xy(x的y次方)的值 45 # math 模块 pow() 方法的语法: math.pow(x, y) 46 # 内置的 pow()方法: pow(x, y) 47 print() #打印 48 range() #函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表 49 repr() #函数将对象转化为供解释器读取的形式 50 reversed() #用于反向列表中元素 51 round() #返回浮点数 x 的四舍五入值 52 slice() #实现切片对象,主要用在切片操作函数里的参数传递 53 sorted() #对所有可迭代的对象进行排序操作 字典按可以按key或者vaual来排序 54 setattr() #对应函数 getattr(),用于设置属性值,该属性不一定是存在的 55 sum() #对序列进行求和计算 56 tuple() #函数将可迭代系列(如列表)转换为元组 57 type() #只有第一个参数则返回对象的类型,三个参数返回新的类型对象 58 # isinstance() 与 type() 区别: 59 # type() 不会认为子类是一种父类类型,不考虑继承关系。 60 # isinstance() 会认为子类是一种父类类型,考虑继承关系。 61 # 如果要判断两个类型是否相同推荐使用 isinstance() 62 vars() #返回对象object的属性和属性值的字典对象 63 zip() #函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
json序列化
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 #json序列化 5 import json,pickle 6 def sayhi(name): 7 print("hello,",name) 8 9 info = { 10 "name":"yao", 11 "age":22, 12 "func":sayhi 13 14 } 15 16 f= open("test.text","r") 17 f.write(json.dumps(info)) 18 data = json.loads(f.read()) 19 f.close() 20 print(data["age"])
json反序列化
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import pickle 4 def sayhi(name): 5 print("hello2222222,",name) 6 f= open("test.text","rb") 7 8 data = pickle.loads(f.read()) 9 print(data["func"]("yao"))

浙公网安备 33010602011771号