Python高級編程第二版--筆記

不僅是CPython

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

python真正出衆的領域在於圍繞語言打造的整個生態系統。html

PyPI包索引java

python shell自定義

  • IPython
  • bpython
  • ptpython

交互式調試器--pdbpython

虛擬環境

  • virtualenv
  • venv:標準庫提供的,和virtualenv用法幾乎相同,pyvenv 名字
  • Vagrant

buildout:可用於引導啓動並部署python編寫的應用。shell

pip freeze:該命令能夠打印出當前環境全部的python包,包括僅用於測試的。編程

有用的資源

  • Awesome-Python:包括流行包和框架列表
  • Python Weekly:每週向訂閱者發送有趣的Python包和資源

不太明白

virtualenv徹底依賴於在文件系統中的存儲狀態,不會提供額外功能來跟蹤應該安裝哪些包。這些虛擬環境不可移植,不能移動到其它系統或機器。 常規作法:將全部項目依賴保存到一個requirements.txt(約定命名)文件中,使用pip安裝:pip install -r requirements.txt數組

  • 容器化和虛擬化

Python在建立這些數組時採用了指數過度配,因此並非每次操做都須要改變數組大小。閉包

  •  混合類

  •  Python元編程(至關複雜)

 

集合、字典

CPython中的列表根本不是列表,被實現爲長度可變的數組。
Python中的列表是由對其餘對象的引用組成的連續的數組。框架

 

類裝飾器閉包缺陷

類裝飾器中這樣使用閉包,生成的對象再也不是被裝飾的類的實例,而是裝飾器中動態建立的子類的實例。less

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包構建

一個簡單的實例

http://www.javashuo.com/article/p-mtuyoehl-c.html

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

 

 

 

待續......................

相關文章
相關標籤/搜索