1. 程式人生 > >Python提高筆記整理(一)

Python提高筆記整理(一)

局部變量 glob 變量 數字 查找 cpu reload imp 面向對象

  • 什麽是GIL?GIL對多線程的影響
    GIL全稱Global Interpreter Lock(全局解釋器鎖)。GIL和Python語言沒有任何關系,只是因為歷史原因導致在官方推薦的解釋器Cpython中遺留的問題。每個線程在執行的過程中都需要先獲取GIL,保證同一時刻只有一個線程可以執行代碼,但是當遇到IO阻塞會自動的釋放GIL鎖,所以使用多線程還是比單線程的效率要高。如果想發揮多核CPU資源,可以使用多進程。為了避免受GIL的影響可以不用官方推薦的Cpython,或者用其他語言來實現。
    計算密集型建議采用進程
    IO密集型建議采用線程或者協程
    2.深拷貝和淺拷貝
    淺拷貝是對一個對象的頂層(外層)拷貝,只是拷貝了引用,並沒有拷貝內容。
    變量的賦值是地址的引用,也算是一種淺拷貝。
    copy.copy()
    深拷貝則是對一個對象深層(遞歸)的拷貝。
    copy.deepcopy()
    可變類型:列表、字典
    不可變類型:數字類型、字符串型、元組
    如果是可變類型,淺拷貝只拷貝外層,而深拷貝是完全拷貝
    如果是純的不可變類型,那麽無論是淺拷貝還是深拷貝,都只是指向同一個地址。如果不可變類型裏面還存在可變類型,則淺拷貝是指向,而深拷貝則為完全拷貝。
    (了解)列表切片、字典的copy方法均屬於淺拷貝
    3.私有化
    xx: 公有變量
    _x: 單前置下劃線,私有化屬性或方法,from 模塊 import *禁止導入,類對象和子類可以訪問。
    __xx:雙前置下劃線,避免與子類中的屬性命名沖突,無法在外部直接訪問(名字重整所以訪問不到,類名xx)
    xx:雙前後下劃線,用戶名字空間的魔法對象或屬性。例如:init , 不要自己發明這樣的名字。
    xx
    :單後置下劃線,用於避免與Python關鍵詞的沖突,不推薦使用。
    4.模塊搜索順序
    import sys
    sys.path # 返回查找模塊的列表目錄,列表中的路徑的先後順序代表了python解釋器在搜索模塊時的先後順序。
    sys.path.append(‘/home/itcast/xxx‘) # 在列表最後追加搜索目錄
    sys.path.insert(0, ‘/home/itcast/xxx‘) # 可以確保先搜索這個路徑
    5.重新導入模塊
    from imp import reload
    reaload(模塊名)
    (必須得先import 模塊)
    6.多模塊開發時註意事項
    通過from 模塊 import 變量,此時相當於給一個變量賦值,如果在程序中修改了變量的值就導致這個變量成了局部變量,跟其他模塊就不共享了。如果多模塊開發時想導入變量,建議使用import 模塊名的方式,然後通過模塊名.變量的方式去調用。
    7.面向對象的三大特性(封裝、繼承、多態)
    封裝就是把方法和屬性封裝到類的內部,只需要在類的外部,通過對象即可調用。繼承實現了代碼的重用。子類可以繼承父類,並且可以繼承多個父類即多繼承,子類可以使用父類所擁有的屬性和方法(除了私有屬性和方法)。多態是以繼承和重寫父類方法為前提,增加了代碼的靈活度,只是一種調用技巧。
  • Python提高筆記整理(一)