1. 程式人生 > 實用技巧 >老男孩教育python全棧第22期Day15筆記

老男孩教育python全棧第22期Day15筆記

day15

  1. 今日內容大綱

  2. 昨日內容回顧作業講解

    • 裝飾器:完美的呈現了開放封閉原則。裝飾器的本質:閉包。

    • def wraper(f):
          def inner(*args, **kwargs):
              """執行被裝飾函式之前的操作"""
              ret = f(*args, **kwargs)
              """執行被裝飾函式之後的操作"""
              return ret
          return inner
      
  3. 今日內容

    1. 自定義模組:

      • 什麼是模組:本質就是一個.py檔案,封裝語句的最小單位。
      • 自定義模組:實際上就是定義.py檔案,其中可以包含,變數定義,可執行語句,for迴圈,函式定義等等,它們統成為模組的成員。
    2. 模組的執行方式:

      • 指令碼方式:直接用直譯器執行,或者pycharm中右鍵執行。
      • 模組方式:被其他的模組匯入。為匯入它的模組提供資源(函式定義,類定義,變數等)。
    3. __name__的使用:

      • 在指令碼方式執行時,_name__是固定的字串:_main
      • 在義模組方式匯入時,__name__就是本模組的名字。
    4. 系統匯入模組時的路徑

      • 記憶體中:如果之前成功匯入模組,直接使用已經存在的模組
      • 內建路徑中:安裝路徑下:Lib
      • PYTHONPATH:import時尋找模組的路徑。(一般不用。)
      • sys.path:是一個路徑的列表。

      如果都找不到,就報錯。

      動態修改sys.path。

      os.path.dirname()獲取某個路徑的父路徑。通常用於獲取當前模組的相對路徑。

      import sys
      import os
      # print(os.path.dirname((__file__)) + '/aa')
      sys.path.append(os.path.dirname((__file__)) + '/aa')
      
    5. 匯入模組的多種方式:

      • import xxx:匯入一個模組的所有成員。
      • import aaa, bbb:一次性匯入多個模組的成員。不推薦這種寫法,分開寫。import os,sys 這倆是黃金搭檔可以一起寫。
      • from xxx import a:從某個模組中匯入指定的成員。
      • from xxx import a,b,c:從某個模組中匯入多個成員。
      • form xxx import *:從一個模組中匯入所以的成員。
    6. import xxx 和 form xxx import *的區別

      • 第一種方式在使用其中成員時,必須使用模組名作為字首。不容易產生命名衝突。
      • 第二種方式在使用其中成員時,不用使用模組名作為字首,直接使用成員名即可。容易產生命名衝突。在後面定義的成員名生效(把前面的覆蓋了)。
      • 怎麼解決名稱衝突問題?
        • 改用 import xxx。
        • 自己避免使用同名。
        • 使用別名解決衝突
      • 使用別名:alias
        • 給成員起別名,避免名稱衝突。from my_modul import age as a
        • 給模組器別名,目的簡化書寫。import my_modul as m
    7. form xxx import *預設控制成員被匯入

      1. 預設情況下,所以的成員都會被匯入。
      2. __all__是一個列表,用於表示本模組可以被外界使用的成員。元素時成員名組成的字串。
      3. 使用__all__控制哪些成員可以被外界使用 只對於 from import 起作用
    8. 相對匯入

      1. 針對某個專案中的不同模組之間進行匯入,叫做相對匯入。

      2. 只有一種格式:from 相對路徑 import xxx

        1. 相對路徑:包含了待你好的一個相對路徑。
        2. .表示的是當前的路徑。
        3. ..表示的是父路徑
        4. ...表示的是父路徑的父路徑
        # 相對匯入同項目下的模組
        # from ..z import zz    # 容易象外界暴露zz模組
        from ..z.zz import *
        
        # 不使用相對匯入的方式,匯入本專案中的模組
        # 通過當前檔案的路徑找到你想匯入的z的路徑
        import os,sys
        sys.path.append(os.path.dirname(os.path.dirname(__file__)) + '/z')
        from zz import *
        
    9. 常用模組:time,datatime,random

      1. random
        1. 此模組提供了隨機數獲取的相關的方法。官方文件(C:\Users\libo\AppData\Local\Programs\Python\Python36\Doc)
        2. random.random():獲取[0.0,1.0)範圍內的浮點數。
        3. random.randint(a,b):獲取[a,b]範圍內的一個整數。
        4. random.uniform(a,b):獲取[a,b)範圍內的浮點數。
        5. random.shuffle(x):把引數指定的資料中的元素混洗,其中引數為變的資料型別。
        6. random.sample(x,k):從x中隨機抽取k個數據,組成一個列表返回。
  4. 今日總結

    函式總結思維導圖
    GitHub倉庫
    https://github.com/libo-sober/LearnPython/tree/master/day12

  5. 預習內容