字符串格式化
format格式化
支持位置和字典参数格式化。(不支持同时位置和字典参数形式)
|
|
%百分号格式化
支持类型、位置和字典参数格式化。
|
|
()括号的作用
|
|
iter函数
- iter(collections) -> iterator
- iter(callable, stop) -> iterator
返回一个迭代器,反复调用callabe函数直到其返回stop
|
|
类的私有方法
__method
以双下划线开头的方法
|
|
类的私有属性,不能通过实例修改。
类似全局变量和私有变量的关系
|
|
修改类的类变量有两种方式
第一种方式通过类直接修改
|
|
第二种方式通过实例的class 修改。
|
|
当通过实例为 类属性 赋新值时,实际上是创建了一个新的实例属性,不会修改类属性。类似在函数内直接为全局变量赋值,不能修改全局变量,而是创建同名的局部变量
|
|
当然,如果类属性是一个可变变量,例如 [], {} 可以调用对应的方法修改内部元素,而不会创建实例变量
|
|
类属性的最佳使用方式是,创建所有实例共享的变量,并且不会通过实例修改;或者通过 isntance.__class.var的方式显式的进行修改
|
|
函数参数在定义时实例化,可变参数被共享
|
|
- 参数numbers在定义时候实例化,并且默认绑定,等于每次传入相同的实例化对象。
- 更好的实践方式,定义默认的不可变参数,然后处理
|
|
list列表
list 支持+
;不支持-
操作符
|
|
输出格式化的文本的第x行的第y列
类似 grep ‘cpu0’ input_file |cut -d” “ -f2 命令, 选取cpu0行的第2个
|
|
__slots__
减少实例内存使用,
__slots__
会阻止class建立 __dict__
属性,即阻止实例动态的添加属性,从而减少创建 __dict__
的内存消耗。
|
|
一颗树结构
|
|
context manager上下文管理器
with
与as
关键词是自动上下文管理
的语法支持。
|
|
file
类文件对象均支持 Context Manager
。一个类实现 Context Manager的方法是利用 __enter__
和 __exit__
特殊方法。实例:
|
|
需要注意的点:
- a)如果在
__enter__
内发生异常,则程序不进入context manager机制,直接抛出异常。
|
|
- b)如果在block内发生异常,
__exit__
将捕获异常。如果不返回True,则异常向上层传递。如果返回True,则异常被忽略。
|
|
如何对函数进行 context manager
利用 contexlib
模块, try...finally...
和 yield
语法。
|
|
同时有多个对象需要context manager
例如复制一个文件内容到另一个文件。
|
|
descriptor描述符
描述符是将一个方法转为属性的便捷方式。descriptor类必须包含至少一个 __get__
, __set__
, __delete__
特殊方法。 __get__
描述一个属性取值时的表现; __set__
描述一个属性赋值时的表现, __delete__
描述一个属性被删除时的表现。
|
|
更常见的情况下,是将两个相互联系的属性通过descriptor连接起来。
|
|
或者作为装饰器修饰类的一个方法,改变其默认行为。
|
|
利用__getattr__
和setattr
缓存
|
|
第二次获取属性的时候没有通过 __getattr__
方法获取,直接获取的属性。
iter迭代器的妙用
iter迭代器中的每个元素只会被迭代一次,可以通过in
、next
消耗。
|
|
通过slice函数对迭代器进行组合
|
|
如果使用map函数,可以产生所有组合,不足的使用None补充
|
|
再结合s[start:] = s[start:None]
的特性就可以输出给定序列的片段。
|
|
flock超时函数(stackoverflow)
利用linux中IO堵塞模型中遇到信号返回EINTR,利用Python IO模型中不成功返回IOError
|
|
这段代码逻辑清楚,而且对获取锁、超时、其他异常的错误处理都很完美,并且体现了对linux和python都有很深的掌握