《Python基础教程,第3版》 by Magnus Lie Hetland

除非必须使用from版的import命令,否则应坚持使用常规版import命令。

e.g., from cmath import sqrt

这样就无法使用math中的sqrt了。

PS:cmath是处理复数的模块


__future__模块


==用来检查两个对象是否相等,is用来检查两个对象是否为同一个(id是否相同);不要将id用于数字和字符串等不可变的基本值,结果是未定义的。

e.g.,

>>> x = y = [1, 2]

>>> z = [1, 2]

>>> x == z  # True

>>> x is z    # False


from module import * 不会导入以下划线打头的名称,e.g.,如果定义了__all__公有接口,from copy import *导入的只有copy.__all__中的Error,copy和deepcopy,其他的模块如PyStringMap需要显式导入和使用。


源码路径

模块的__file__指向代码所在(python实现的才有)

>>> import copy

>>> print(copy.__file__)  # 打印出来的路径即copy代码文件所在


子类构造函数与super()

子类重写构造函数时,需要调用超类的构造函数,以确保初始化基类所有的属性。有两种方法:调用未关联的超类构造函数;使用super函数,后者更推荐,因为即使有多个超类也只要调用一次super就可以了。

class Bird:

    def __init__(self):

        self.hungry = True


class SongBird(Bird):

    def __init__(self):

        Bird.__init__(self) # 方法一

        super().__init__()  # 方法二,推荐

        self.sound = 'Squawk!'


property类

class Rectangle:

    def __init__(self):

        self.width = 0

        self.height = 0

    def get_size(self):

          retun self.width, self.height

    def set_size(self, size):

          self.width, self.height = size

    size = property(get_size, set_size)

    # 上一行创建了一个特性,并将名称size关联到这个特性。


>>> r = Rectangle()

>>> r.width = 10

>>> r.height = 5

>>> r.size  # 看起来就像普通属性一样

>>> r.size = 150, 100


pprint—比print打印效果可阅读行强

>>> import sys, pprint

>>> pprint.pprint(sys.path)


推荐模块放在site-packages目录下。


告诉解释器到哪里去查找模块,办法之一是直接修改sys.path,更标准的做法是将模块所在目录包含在环境变量PYTHONPATH中,如linux中在.bashrc中加入:

export PYTHONPATH=$PYTHONPATH:自定义目录


包package

包含__init__.py和各个模块文件(可以包含其他包)。


堆特征

堆中元素排列不是严格排序的,但:位置i处的位置总是大于位置i // 2处的元素。heappop弹出最小的元素始终是索引为0的元素,并确保剩余元素中最小的那个位于索引0处(保持堆特征)。

把普通列表变成heap使用heapify函数。


双端队列

deque.rotate(n)  默认n为1,既执行一次把最左边的元素移到右边,n>1则重复操作n次(并不是一次移动n个元素);n<0执行方向变为从右边移动左边。


shelve

将数据存储到文件中,可以像字典一样操作(key必须是字符串)。

存储陷阱:

>>> s = sheve.open("test.dat")

>>> s['x'] = ['a', 'b', 'c']

>>> s['x'].append('d')  # 操作和返回的都是副本,所以'd'并未存储到s['x']中。

解决方法:将副本赋给一个临时list变量,修改临时变量后再次存储。


>>> tmp = s['x']

>>> tmp.append('d')

>>> s['x'] = tmp







       

你可能感兴趣的:(《Python基础教程,第3版》 by Magnus Lie Hetland)