美文网首页我爱编程
《Python基础教程,第3版》 by Magnus Lie H

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

作者: Lynn_Lau | 来源:发表于2018-05-28 11:23 被阅读0次

    除非必须使用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 H

        本文链接:https://www.haomeiwen.com/subject/fggwjftx.html