python真正出衆的領域在於圍繞語言打造的整個生態系統。html
PyPI包索引java
交互式調試器--pdbpython
buildout:可用於引導啓動並部署python編寫的應用。shell
pip freeze:該命令能夠打印出當前環境全部的python包,包括僅用於測試的。編程
virtualenv徹底依賴於在文件系統中的存儲狀態,不會提供額外功能來跟蹤應該安裝哪些包。這些虛擬環境不可移植,不能移動到其它系統或機器。 常規作法:將全部項目依賴保存到一個requirements.txt(約定命名)文件中,使用pip安裝:pip install -r requirements.txt數組
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__()對python不可變的內置類型(int,str,float,frozenset)等進行子類化。由於一旦建立了這樣不可變的對象實例,就沒法在__init__()方法中對其進行修改。工具
何爲可變不可變類型:https://blog.csdn.net/dan15188387481/article/details/49864613
__new__()不限於返回同一個類的實例,可能會濫用,因此要慎用。
一個對象的屬性查找順序遵循首先查找實例對象本身,而後是類,接着是類的父類。
# 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:名稱改寫或是名稱修飾技術。
Pythonic就是以Python的方式寫出簡潔優美的代碼!
http://www.javashuo.com/article/p-mtuyoehl-c.html
http://blog.konghy.cn/2018/04/29/setup-dot-py/
待續......................