Fork me on GitHub

Python高级编程第二版--笔记

不只是CPython

  • Stackless Python
  • Jython(与java集成)
  • IronPython(与net集成)
  • PyPy

python真正出众的领域在于围绕语言打造的整个生态系统。

PyPI包索引

python shell自定义

  • IPython
  • bpython
  • ptpython

交互式调试器--pdb

虚拟环境

  • virtualenv
  • venv:标准库提供的,和virtualenv用法几乎相同,pyvenv 名字
  • Vagrant

buildout:可用于引导启动并部署python编写的应用。

pip freeze:该命令可以打印出当前环境所有的python包,包括仅用于测试的。

有用的资源

  • Awesome-Python:包括流行包和框架列表
  • Python Weekly:每周向订阅者发送有趣的Python包和资源

不太明白

virtualenv完全依赖于在文件系统中的存储状态,不会提供额外功能来跟踪应该安装哪些包。这些虚拟环境不可移植,不能移动到其它系统或机器。 常规做法:将所有项目依赖保存到一个requirements.txt(约定命名)文件中,使用pip安装:pip install -r requirements.txt

  • 容器化和虚拟化

Python在创建这些数组时采用了指数过分配,所以并不是每次操作都需要改变数组大小。

  •  混合类

  •  Python元编程(相当复杂)

 

集合、字典

CPython中的列表根本不是列表,被实现为长度可变的数组。
Python中的列表是由对其他对象的引用组成的连续的数组。

 

类装饰器闭包缺陷

类装饰器中这样使用闭包,生成的对象不再是被装饰的类的实例,而是装饰器中动态创建的子类的实例。

def paramrized_short_repr(max_width=8):
    def paramrized(cls):
        class ShortlyRepd(cls):
            """提供装饰器行为的子类"""
            def __repr__(self):
                return super().__repr__()[:max_width]

        return ShortlyRepd

    return paramrized


@paramrized_short_repr(80)
class MyClass_Short:
    pass

print(MyClass_Short().__class__)

混入类

__new__使用场景

使用__new__()对python不可变的内置类型(int,str,float,frozenset)等进行子类化。因为一旦创建了这样不可变的对象实例,就无法在__init__()方法中对其进行修改。

何为可变不可变类型:https://blog.csdn.net/dan15188387481/article/details/49864613

__new__()不限于返回同一个类的实例,可能会滥用,所以要慎用。

__dict__

一个对象的属性查找顺序遵循首先查找实例对象自己,然后是类,接着是类的父类。

python2与python3元类语法

# python3
class ClassWithAMetaclass(metaclass=type):
    pass

# python2
class ClassWithAMetaclass(object):
    __metaclass__ = type

使用兼容的包: from six import with_metaclass

class Meta(type):
    pass

class Base(object):
    pass

class MyClass(with_metaclass(Meta,Base)):
    pass

name-mangling

name-mangling:名称改写或是名称修饰技术。

  • _xxx:表示内部使用,不能被from M import * 导入
  • xxx_:表示避免和关键字冲突
  • __xxx:更彻底的private,用到了name mangling技术,会自动加上类名前缀,不能被子类和类外部访问
  • _xxx_:魔术方法或用户控制的命名空间

Pythonic

Pythonic就是以Python的方式写出简洁优美的代码!

  • 优美
  • 明了
  • 简洁
  • 可读性很重要
  • .........

代码检测工具

  • PyLint
  • pep8

 

Python包构建

一个简单的实例

https://www.cnblogs.com/cposture/p/9029023.html

http://blog.konghy.cn/2018/04/29/setup-dot-py/

 

 

 

待续......................

posted @ 2018-09-18 23:13  迁梦余光  阅读(621)  评论(0编辑  收藏  举报