前言:
为什么要学习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 importtime2
3 deftimmer(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 returnwarpper()10
11 @timmer12 deftest1():13 time.sleep(3)14 print("in the test1")15
16 test1()
View Code
列表生成器:
# 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), 相当于函数又返回了一次值
View Code
迭代器:
#函数
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() #函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
View Code
json序列化
1 #!/usr/bin/env python
2 #-*- coding: utf-8 -*-
3
4 #json序列化
5 importjson,pickle6 defsayhi(name):7 print("hello,",name)8
9 info ={10 "name":"yao",11 "age":22,12 "func":sayhi13
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"])
View Code
json反序列化
1 #!/usr/bin/env python
2 #-*- coding: utf-8 -*-
3 importpickle4 defsayhi(name):5 print("hello2222222,",name)6 f= open("test.text","rb")7
8 data =pickle.loads(f.read())9 print(data["func"]("yao"))
View Code