-
10个高斯分布的坐标点
random模块中的 gauss(u,sigma)⽣成均值为u, 标准差为sigma的满⾜⾼斯分布的值,如下⽣成10个⼆维坐标点,样本误差(y-2*x-1)满⾜均值为0,标准差为1的⾼斯分布:
from random import gauss x = range(10) y = [2*xi+1+gauss(0,1) for xi in x] points = list(zip(x,y)) ''' [(0, 1.1857687957947285), (1, 1.9064665515053503), (2, 4.917591069393434), (3, 7.2320484985880285), (4, 7.587401313468067), (5, 11.814996362651682), (6, 12.14720739684673), (7, 13.823825886453758), (8, 14.619846387726097), (9, 18.49627674870084)] '''
-
chain高效串联多个容器对象
chain函数串联a和b,兼顾内存效率同时写法更加优雅。
from itertools import chain a = [1,3,5,0] b = (2,4,6) for i in chain(a,b): print(i) ''' 1 3 5 0 2 4 6 '''
-
操作函数对象
创建函数对象的list,根据想要调⽤的index,⽅便统⼀调⽤。
def f(): print('i\'m f') def g(): print('i\'m g') [f,g][1]() # i'm g
-
生成逆序序列
第三个参数为负时,表⽰从第⼀个参数开始递减,终⽌到第⼆个参数(不包括此边界)。
list(range(10,-1,-1)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
-
函数的五类参数使用例子
python五类参数:位置参数,关键字参数,默认参数,可变位置或关键字参数的使⽤。
def f(a,*b,c=10,**d): print(f'a:{a},b:{b},c:{c},d:{d}')
默认参数c不能位于可变关键字参数d后,调用f:
f(1,2,5,width=10,height=20) # a:1,b:(2, 5),c:10,d:{'width': 10, 'height': 20}
可变位置参数 b 实参后被解析为元组 (2,5);⽽c取得默认值10; d被解析为字典。再次调用f:
f(a=1,c=12) # a:1,b:(),c:12,d:{}
a=1传⼊时a就是关键字参数,b,d都未传值,c被传⼊12,⽽⾮默认值。注意观察参数 a , 既可以 f(1),也可以 f(a=1) 其可读性⽐第⼀种更好,建议使⽤f(a=1)。如果要强制使⽤ f(a=1),需要在前⾯添加⼀个星号。
-
使用slice对象
⽣成关于蛋糕的序列cake1:
cake1=list(range(5,0,-1)) b=cake1[1:10:2] # [4, 2] cake1 # [5, 4, 3, 2, 1]
再生成一个序列:
from random import randint cake2=[randint(1,100) for _ in range(100)] d=cake2[1:10:2] # [97, 68, 83, 6, 73]
你看,我们使⽤同⼀种切法,分别切开两个蛋糕cake1,cake2. 后来发现这种切法 极为经典 ,又拿它去切更多的容器对象。那么,为什么不把这种切法封装为⼀个对象呢?于是就有了slice对象。定义slice对象极为简单,如把上⾯的切法定义成slice对象:
perfect_cake_slice_way=slice(1,10,2) cake1_slice=cake1[perfect_cake_slice_way] cake1_slice # [4,2]
对于逆向序列切⽚, slice对象⼀样可⾏:
a=[1,3,5,7,9,0,3,5,7] a_=a[5:1:-1] # [0, 9, 7, 5] name_slice=slice(5,1,-1) a_slice=a[name_slice] # [0,9,7,5]
-
lambda函数
def max_len(*lists): return max(*lists, key=lambda v: len(v)) r = max_len([1, 2, 3], [4, 5, 6, 7], [8]) print(f'更长的列表是{r}') # 更长的列表是[4, 5, 6, 7]
结论:
- 参数v的可能取值为 *lists,也就是 tuple 的⼀个元素。
- lambda函数返回值,等于 lambda v 冒号后表达式的返回值。
-
粘性之禅
def product(*args, repeat=1): pools = [tuple(pool) for pool in args] * repeat result = [[]] for pool in pools: result = [x+[y] for x in result for y in pool] for prod in result: yield tuple(prod) rtn = product('xyz', '12', repeat=3) print(list(rtn)) ''' [('x', '1', 'x', '1', 'x', '1'), ('x', '1', 'x', '1', 'x', '2'), ('x', '1', 'x', '1', 'y', '1'), ('x', '1', 'x', '1', 'y', '2'), ('x', '1', 'x', '1', 'z', '1'), ('x', '1', 'x', '1', 'z', '2'), ('x', '1', 'x', '2', 'x', '1'), ('x', '1', 'x', '2', 'x', '2'), ('x', '1', 'x', '2', 'y', '1'), ('x', '1', 'x', '2', 'y', '2'), ('x', '1', 'x', '2', 'z', '1'), ('x', '1', 'x', '2', 'z', '2'), ('x', '1', 'y', '1', 'x', '1'), ('x', '1', 'y', '1', 'x', '2'), ('x', '1', 'y', '1', 'y', '1'), ('x', '1', 'y', '1', 'y', '2'), ('x', '1', 'y', '1', 'z', '1'), ('x', '1', 'y', '1', 'z', '2'), ('x', '1', 'y', '2', 'x', '1'), ('x', '1', 'y', '2', 'x', '2'), ('x', '1', 'y', '2', 'y', '1'), ('x', '1', 'y', '2', 'y', '2'), ('x', '1', 'y', '2', 'z', '1'), ('x', '1', 'y', '2', 'z', '2'), ('x', '1', 'z', '1', 'x', '1'), ('x', '1', 'z', '1', 'x', '2'), ('x', '1', 'z', '1', 'y', '1'), ('x', '1', 'z', '1', 'y', '2'), ('x', '1', 'z', '1', 'z', '1'), ('x', '1', 'z', '1', 'z', '2'), ('x', '1', 'z', '2', 'x', '1'), ('x', '1', 'z', '2', 'x', '2'), ('x', '1', 'z', '2', 'y', '1'), ('x', '1', 'z', '2', 'y', '2'), ('x', '1', 'z', '2', 'z', '1'), ('x', '1', 'z', '2', 'z', '2'), ('x', '2', 'x', '1', 'x', '1'), ('x', '2', 'x', '1', 'x', '2'), ('x', '2', 'x', '1', 'y', '1'), ('x', '2', 'x', '1', 'y', '2'), ('x', '2', 'x', '1', 'z', '1'), ('x', '2', 'x', '1', 'z', '2'), ('x', '2', 'x', '2', 'x', '1'), ('x', '2', 'x', '2', 'x', '2'), ('x', '2', 'x', '2', 'y', '1'), ('x', '2', 'x', '2', 'y', '2'), ('x', '2', 'x', '2', 'z', '1'), ('x', '2', 'x', '2', 'z', '2'), ('x', '2', 'y', '1', 'x', '1'), ('x', '2', 'y', '1', 'x', '2'), ('x', '2', 'y', '1', 'y', '1'), ('x', '2', 'y', '1', 'y', '2'), ('x', '2', 'y', '1', 'z', '1'), ('x', '2', 'y', '1', 'z', '2'), ('x', '2', 'y', '2', 'x', '1'), ('x', '2', 'y', '2', 'x', '2'), ('x', '2', 'y', '2', 'y', '1'), ('x', '2', 'y', '2', 'y', '2'), ('x', '2', 'y', '2', 'z', '1'), ('x', '2', 'y', '2', 'z', '2'), ('x', '2', 'z', '1', 'x', '1'), ('x', '2', 'z', '1', 'x', '2'), ('x', '2', 'z', '1', 'y', '1'), ('x', '2', 'z', '1', 'y', '2'), ('x', '2', 'z', '1', 'z', '1'), ('x', '2', 'z', '1', 'z', '2'), ('x', '2', 'z', '2', 'x', '1'), ('x', '2', 'z', '2', 'x', '2'), ('x', '2', 'z', '2', 'y', '1'), ('x', '2', 'z', '2', 'y', '2'), ('x', '2', 'z', '2', 'z', '1'), ('x', '2', 'z', '2', 'z', '2'), ('y', '1', 'x', '1', 'x', '1'), ('y', '1', 'x', '1', 'x', '2'), ('y', '1', 'x', '1', 'y', '1'), ('y', '1', 'x', '1', 'y', '2'), ('y', '1', 'x', '1', 'z', '1'), ('y', '1', 'x', '1', 'z', '2'), ('y', '1', 'x', '2', 'x', '1'), ('y', '1', 'x', '2', 'x', '2'), ('y', '1', 'x', '2', 'y', '1'), ('y', '1', 'x', '2', 'y', '2'), ('y', '1', 'x', '2', 'z', '1'), ('y', '1', 'x', '2', 'z', '2'), ('y', '1', 'y', '1', 'x', '1'), ('y', '1', 'y', '1', 'x', '2'), ('y', '1', 'y', '1', 'y', '1'), ('y', '1', 'y', '1', 'y', '2'), ('y', '1', 'y', '1', 'z', '1'), ('y', '1', 'y', '1', 'z', '2'), ('y', '1', 'y', '2', 'x', '1'), ('y', '1', 'y', '2', 'x', '2'), ('y', '1', 'y', '2', 'y', '1'), ('y', '1', 'y', '2', 'y', '2'), ('y', '1', 'y', '2', 'z', '1'), ('y', '1', 'y', '2', 'z', '2'), ('y', '1', 'z', '1', 'x', '1'), ('y', '1', 'z', '1', 'x', '2'), ('y', '1', 'z', '1', 'y', '1'), ('y', '1', 'z', '1', 'y', '2'), ('y', '1', 'z', '1', 'z', '1'), ('y', '1', 'z', '1', 'z', '2'), ('y', '1', 'z', '2', 'x', '1'), ('y', '1', 'z', '2', 'x', '2'), ('y', '1', 'z', '2', 'y', '1'), ('y', '1', 'z', '2', 'y', '2'), ('y', '1', 'z', '2', 'z', '1'), ('y', '1', 'z', '2', 'z', '2'), ('y', '2', 'x', '1', 'x', '1'), ('y', '2', 'x', '1', 'x', '2'), ('y', '2', 'x', '1', 'y', '1'), ('y', '2', 'x', '1', 'y', '2'), ('y', '2', 'x', '1', 'z', '1'), ('y', '2', 'x', '1', 'z', '2'), ('y', '2', 'x', '2', 'x', '1'), ('y', '2', 'x', '2', 'x', '2'), ('y', '2', 'x', '2', 'y', '1'), ('y', '2', 'x', '2', 'y', '2'), ('y', '2', 'x', '2', 'z', '1'), ('y', '2', 'x', '2', 'z', '2'), ('y', '2', 'y', '1', 'x', '1'), ('y', '2', 'y', '1', 'x', '2'), ('y', '2', 'y', '1', 'y', '1'), ('y', '2', 'y', '1', 'y', '2'), ('y', '2', 'y', '1', 'z', '1'), ('y', '2', 'y', '1', 'z', '2'), ('y', '2', 'y', '2', 'x', '1'), ('y', '2', 'y', '2', 'x', '2'), ('y', '2', 'y', '2', 'y', '1'), ('y', '2', 'y', '2', 'y', '2'), ('y', '2', 'y', '2', 'z', '1'), ('y', '2', 'y', '2', 'z', '2'), ('y', '2', 'z', '1', 'x', '1'), ('y', '2', 'z', '1', 'x', '2'), ('y', '2', 'z', '1', 'y', '1'), ('y', '2', 'z', '1', 'y', '2'), ('y', '2', 'z', '1', 'z', '1'), ('y', '2', 'z', '1', 'z', '2'), ('y', '2', 'z', '2', 'x', '1'), ('y', '2', 'z', '2', 'x', '2'), ('y', '2', 'z', '2', 'y', '1'), ('y', '2', 'z', '2', 'y', '2'), ('y', '2', 'z', '2', 'z', '1'), ('y', '2', 'z', '2', 'z', '2'), ('z', '1', 'x', '1', 'x', '1'), ('z', '1', 'x', '1', 'x', '2'), ('z', '1', 'x', '1', 'y', '1'), ('z', '1', 'x', '1', 'y', '2'), ('z', '1', 'x', '1', 'z', '1'), ('z', '1', 'x', '1', 'z', '2'), ('z', '1', 'x', '2', 'x', '1'), ('z', '1', 'x', '2', 'x', '2'), ('z', '1', 'x', '2', 'y', '1'), ('z', '1', 'x', '2', 'y', '2'), ('z', '1', 'x', '2', 'z', '1'), ('z', '1', 'x', '2', 'z', '2'), ('z', '1', 'y', '1', 'x', '1'), ('z', '1', 'y', '1', 'x', '2'), ('z', '1', 'y', '1', 'y', '1'), ('z', '1', 'y', '1', 'y', '2'), ('z', '1', 'y', '1', 'z', '1'), ('z', '1', 'y', '1', 'z', '2'), ('z', '1', 'y', '2', 'x', '1'), ('z', '1', 'y', '2', 'x', '2'), ('z', '1', 'y', '2', 'y', '1'), ('z', '1', 'y', '2', 'y', '2'), ('z', '1', 'y', '2', 'z', '1'), ('z', '1', 'y', '2', 'z', '2'), ('z', '1', 'z', '1', 'x', '1'), ('z', '1', 'z', '1', 'x', '2'), ('z', '1', 'z', '1', 'y', '1'), ('z', '1', 'z', '1', 'y', '2'), ('z', '1', 'z', '1', 'z', '1'), ('z', '1', 'z', '1', 'z', '2'), ('z', '1', 'z', '2', 'x', '1'), ('z', '1', 'z', '2', 'x', '2'), ('z', '1', 'z', '2', 'y', '1'), ('z', '1', 'z', '2', 'y', '2'), ('z', '1', 'z', '2', 'z', '1'), ('z', '1', 'z', '2', 'z', '2'), ('z', '2', 'x', '1', 'x', '1'), ('z', '2', 'x', '1', 'x', '2'), ('z', '2', 'x', '1', 'y', '1'), ('z', '2', 'x', '1', 'y', '2'), ('z', '2', 'x', '1', 'z', '1'), ('z', '2', 'x', '1', 'z', '2'), ('z', '2', 'x', '2', 'x', '1'), ('z', '2', 'x', '2', 'x', '2'), ('z', '2', 'x', '2', 'y', '1'), ('z', '2', 'x', '2', 'y', '2'), ('z', '2', 'x', '2', 'z', '1'), ('z', '2', 'x', '2', 'z', '2'), ('z', '2', 'y', '1', 'x', '1'), ('z', '2', 'y', '1', 'x', '2'), ('z', '2', 'y', '1', 'y', '1'), ('z', '2', 'y', '1', 'y', '2'), ('z', '2', 'y', '1', 'z', '1'), ('z', '2', 'y', '1', 'z', '2'), ('z', '2', 'y', '2', 'x', '1'), ('z', '2', 'y', '2', 'x', '2'), ('z', '2', 'y', '2', 'y', '1'), ('z', '2', 'y', '2', 'y', '2'), ('z', '2', 'y', '2', 'z', '1'), ('z', '2', 'y', '2', 'z', '2'), ('z', '2', 'z', '1', 'x', '1'), ('z', '2', 'z', '1', 'x', '2'), ('z', '2', 'z', '1', 'y', '1'), ('z', '2', 'z', '1', 'y', '2'), ('z', '2', 'z', '1', 'z', '1'), ('z', '2', 'z', '1', 'z', '2'), ('z', '2', 'z', '2', 'x', '1'), ('z', '2', 'z', '2', 'x', '2'), ('z', '2', 'z', '2', 'y', '1'), ('z', '2', 'z', '2', 'y', '2'), ('z', '2', 'z', '2', 'z', '1'), ('z', '2', 'z', '2', 'z', '2')] '''
-
元类
xiaoming, xiaohong, xiaozhang 都是学⽣,这类群体叫做 Student.Python 定义类的常见⽅法,使⽤关键字 class。
class Student(object): pass # xiaoming, xiaohong, xiaozhang 是类的实例,则: xiaoming = Student() xiaohong = Student() xiaozhang = Student() # 创建后,xiaoming 的 __class__ 属性,返回的便是 Student类 xiaoming.__class__ # __main__.Student # 问题在于, Student 类有 _ class _属性,如果有,返回的又是什么? xiaoming.__class__.__class__ # type
哇,程序没报错,返回 type。那么,我们不妨猜测: Student 类,类型就是 type,换句话说, Student类就是⼀个对象,它的类型就是 type。所以,Python 中⼀切皆对象,类也是对象。Python 中,将描述 Student 类的类被称为:元类。按照此逻辑延伸,描述元类的类被称为:元元类,开玩笑了~ 描述元类的类也被称为元类。聪明的朋友会问了,既然 Student 类可创建实例,那么 type 类可创建实例吗? 如果能,它创建的实例就叫:类了。 你们真聪明!说对了, type 类⼀定能创建实例,⽐如 Student 类了。
Student = type('Student',(),{}) Student # __main__.Student
它与使⽤ class 关键字创建的 Student 类⼀模⼀样。
Python 的类,因为又是对象,所以和 xiaoming, xiaohong 对象操作相似。⽀持:
- 赋值
- 拷贝
- 添加属性
- 作为函数参数
StudentMirror = Student # 类直接赋值 Student.class_property = 'class_property' # 添加类属性 hasattr(Student, 'class_property') # True
元类,确实使⽤不是那么多,也许先了解这些,就能应付⼀些场合。就连 Python 界的领袖 TimPeters 都说:“元类就是深度的魔法,99%的⽤户应该根本不必为此操⼼。”
-
对象序列化
对象序列化,是指将内存中的对象转化为可存储或传输的过程。很多场景,直接⼀个类对象,传输不⽅便。但是,当对象序列化后,就会更加⽅便,因为约定俗成的,接⼜间的调⽤或者发起的 web 请求,⼀般使⽤ json 串传输。实际使⽤中,⼀般对类对象序列化。先创建⼀个 Student 类型,并创建两个实例。
class Student(): def __init__(self,**args): self.ids = args['ids'] self.name = args['name'] self.address = args['address'] xiaoming = Student(ids = 1,name = 'xiaoming',address = '北京') xiaohong = Student(ids = 2,name = 'xiaohong',address = '南京') # 导⼊ json 模块,调⽤ dump ⽅法,就会将列表对象 [xiaoming,xiaohong],序列化到⽂件 json.txt 中。 import json with open("./json.txt", 'w') as f: json.dump([xiaoming,xiaohong], f, default=lambda obj: obj.__dict__, ensure_ascii=False, indent=2, sort_keys=True)
''' [ { "address": "北京", "ids": 1, "name": "xiaoming" }, { "address": "南京", "ids": 2, "name": "xiaohong" } ] '''
python实战打卡---day5
最新推荐文章于 2022-07-20 12:20:42 发布