python实战打卡---day5

  1. 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)]
    '''
    
  2. 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
    '''
    
  3. 操作函数对象

    创建函数对象的list,根据想要调⽤的index,⽅便统⼀调⽤。

    def f():
        print('i\'m f')
    def g():
        print('i\'m g')
    [f,g][1]() # i'm g
    
  4. 生成逆序序列

    第三个参数为负时,表⽰从第⼀个参数开始递减,终⽌到第⼆个参数(不包括此边界)。

    list(range(10,-1,-1)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
  5. 函数的五类参数使用例子

    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),需要在前⾯添加⼀个星号。

  6. 使用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]
    
  7. 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 冒号后表达式的返回值。
  8. 粘性之禅

    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')]
    '''
    
  9. 元类

    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%的⽤户应该根本不必为此操⼼。”

  10. 对象序列化

    对象序列化,是指将内存中的对象转化为可存储或传输的过程。很多场景,直接⼀个类对象,传输不⽅便。但是,当对象序列化后,就会更加⽅便,因为约定俗成的,接⼜间的调⽤或者发起的 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基础知识部分结束!!!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leon.shadow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值