iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Software Development

Python 微進階系列 第 12

Python 微進階 Day12 - module(模組)

  • 分享至 

  • xImage
  •  

module(模組)

  • 每個 py 檔案就是 module(模組),因此 module 的名稱就是 py 檔的檔名
    • 每個 module 裡面可能包含相關的變數、函式和類別
  • 當程式變長,通常會拆開成多個檔案,將相關的放在一個 module,需要時再使用 import module_name 等方式匯入,因此可以重複利用,不用重複造輪子
  • Python 本身內建很多標準函式庫,可在需要時匯入,如 import os
  • 每個 module 都有自己的 namespace(命名空間),因此函式若同名時並不會衝突
    • module_a.fun()module_b.fun()fun() 並不相同

import

  • import module_name:匯入 module_name
    • 使用 as 匯入並改名,import numpy as np
  • from module_name import name1, name2:從 module_name 匯入 name1name2
  • from module_name import *:從 module_name 匯入不以 _ 開頭的名稱
    • 不推薦使用
    • 若有同名,第二組 module 會蓋過第一組 module 的功能
  • dir(module_name):可利用 dir()來列出 module 內的所有變數、函式、類別等名稱

namespace(命名空間)

  • Python 有 3 種 namespace(命名空間)如下,每個 namespace 可以當成是一個存有各自空間範圍內的名稱(key)與對應的物件位址(value)的對照表(字典)
  • local(區域):範圍為 function(函式)本身,因此之前才會說變數離開函式就不存在
    • locals():可用來查詢區域命名空間
  • global(全域):範圍為 module 本身,也就是 py 檔案本身,因此 global 是指這個檔案本身的內容範圍,並不包含其他檔案
    • globals():可用來查詢全域命名空間
  • builtin(內建):為 Python 本身內建的類別,如 len()int()list()
    • dir(__builtins__):可列出 Python 內建的的函式
  • 搜尋方式(scoping rule):在存取變數時,會從所屬的 namespace 開始找,若沒有同名的才會往外找,因此順序會是 local -> global -> builtin,由小至大往外搜尋
    • 之前在函式的變數章節提到,函式內是可以直接讀取外部的變數值的(local -> global),也可以直接使用內建的類別(local -> builtin)
  • import module_name::會掛在這個 module 的 namespace
  • from module_name import name:會掛在主程式的 namespace

參考資料

次回

來談談跟 module 高度相關的 package 吧!


上一篇
Python 微進階 Day11 - function(函式) - 2 - *args、**kwargs、變數
下一篇
Python 微進階 Day13 - package(套件)
系列文
Python 微進階31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言