Python笔记

数据结构
  • list

    插入:insert(index, item), append(item)

    删除:pop(index), remove(item)

    合并:extend(List)
  • dict

    插入:update(Dict)

    删除:popitem(), pop(key), del

    合并:update(Dict)
  • set

    插入:add(item), update(iterable)

    删除:remove(item), pop()

    合并:union(Set), update(Set)
  • deque

    插入:insert(index, item), append(item), appendleft(item)

    删除:pop(index), popleft(), remove(item)

    合并:extend(List), extendleft(List)
  • heapq

    插入:heapq.heappush(List, item)

    删除:heapq.heappop(List)

    合并:heapq.merge(*iterable)
语法知识

主要从《Python3 Cookbook》总结。

函数
  • 1, 匿名函数的外部变量是运行时绑定,不是定义时绑定,所以要达到定义时绑定,需要外部变量移到参数位置如lambda x=x: pass
  • 2, 使用partial创建一个预赋参数的函数;
  • 3, 使用闭包(内部函数)比单个方法的类更简洁;
类和对象
  • 1, __repr__, repr(obj), __str__, str(obj), 改变对象的字符串显示;
  • 2, 使用__format__自定义对象的格式化;
  • 3, __enter__(返回值作为as后的变量),__exit__让对象支持上下文管理协议, 结合yieldcontextlib里面的contextmanager也可以;
  • 4, 在类中定义__slots__ 创建大量对象时节省内存;
  • 5, 单下划线使方法变为内部实现,_双下划线使父类属性变为私有,继承后子类属性名字变为_Super__attribute
  • 6, 使用类(实现__get__, __set__, __delete__), property(getter, setter, deleter, doc), @property(@attr.setter, @attr.deleter)等方法实现属性描述符;
  • 7, super()调用mro列表里的类的方法,通常是父类方法。在__getattribute__,__setattr__避免无限递归时也可使用;
  • 8, 继承property后如果要扩展,要么全部方法自己实现一遍,如果要只扩展一个方法,需要对应方法的装饰器改为@Super.attr.setter
  • 9, 使用类描述器可以实现大部分Python类特性,如@classmethod@staticmethod, @property, __slots__等;
  • 10, 使用类描述器(或函数装饰器+@property),通过拦截读取调用__get__方法可以实现所谓的lazy计算;
  • 11, 在父类实现__init__,子类没有__init__,子类实例化时就只调用父类的__init__
  • 12, 实现抽象基类(类似go中的接口),使用@abstractmethodabc模块的ABCMeta
from abc import ABCMeta

class ABC(metaclass=ABCMeta): 
    @abstractmethod 
    def read(): 
        pass

抽象基类不可实例化,抽象基类可以用来在其他地方判断一个对象是不是某种类型,从而判断它是否有相应方法。
还可以使用Super.register(Super.Super)来注册实现抽象基类;

  • 13, 实现类数据模型的类型约束这样任务,可以使用描述器,类装饰器,元类;
  • 14, 继承并实现collections模块的抽象基类,可以实现自定义容器;
  • 15, 在当前类中利用一个别的类的实例,实现__getattr__,__setattr__, __delattr__,找不到当前类的属性时调用,返回实例的属性,即可实现代理类;
  • 16, 实例化一个类时,还可以在某个类方法使用cls(*args, **kwarg)返回实例进行实例化;
  • 17, 实例化一个类时跳过__init__,使用cls.__new__(cls)Cls.__new__(Cls)可得到一个没有属性的实例;
  • 18, 继承一个Mixin类,或者通过类装饰器实现一个Mixin,可以为类添加一些方法;
  • 19, 使用不同状态的类,内部维护这一个状态类,方法接口对对应到这个状态类的方法接口,实现状态模式;
  • 20, 使用getattr(instance, 'attr')获得属性,如果是函数属性可以接着调用,也可以使用operator.methodcaller('attr', *vars, **kwargs)(obj)
  • 21, 使用functools.total_ordering可以简化类之间的比较,只需实现__eq__, __lt__即可自动补充其他比较方法;
  • 22, 使用weakref.WeakValueDictionary()作为缓存保存单例,这样既不会给单例增加额外的引用,也可以实现单例的功能;
元编程
  • 1,使用@wraps可以保留被装饰函数的__name__, __doc__, __annotations__等元信息,被装饰函数在__wrapped__里,python3.3, python3.4+的__wrapped__结果不一样,后者是遇到多层装饰器需要剥开多层__wrapped__
  • 2, 带有参数的装饰器可以有两种写法;
  • 3, inspect模块可以查找函数对象的信息;
  • 4, 可以把类的实例方法,类方法定义成装饰器,使用时实例装饰器需要实例化,类装饰器直接使用@类名.decorator
高质量代码
性能分析及优化
源码剖析
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在网页设计中,为图片添加文字是一种常见的需求,用于增强视觉效果或传达更多信息。本文将介绍两种常用的方法:一种是将图片设置为背景并添加文字;另一种是利用<span>标签结合CSS定位来实现。 这种方法通过CSS实现,将图片设置为一个容器(通常是<div>)的背景,然后在容器中添加文字。具体步骤如下: 创建一个包含文字的<div>元素: 使用CSS设置<div>的背景图片,并调整其尺寸以匹配图片大小: 如有需要,可使用background-position属性调整图片位置,确保文字显示在合适位置。这样,文字就会显示在图片之上。 另一种方法是将文字放在<span>标签内,并通过CSS绝对定位将其放置在图片上。步骤如下: 创建一个包含图片和<span>标签的<div>: 设置<div>为相对定位,以便内部元素可以相对于它进行绝对定位: 设置<span>为绝对定位,并通过调整top和left属性来确定文字在图片上的位置: 这种方法的优点是可以精确控制文字的位置,并且可以灵活调整文字的样式,如颜色和字体大小。 两种方法各有优势,可根据实际需求选择。在实际开发中,还可以结合JavaScript或jQuery动态添加文字,实现更复杂的交互效果。通过合理运用HTML和CSS,我们可以在图片上添加文字,创造出更具吸引力的视觉效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值