Chapter 6 Python模組

6.1 目前工作路徑

要改變工作路徑:

6.2 定義

一個module是一個.py檔裡面含蓋:

  • 物件

  • 函數

以下另存在mymodule.py:

"""mymath - our example math module"""
pi = 3.14159
def area(r):
    """area(r): return the area of a circle with radius r."""
    global pi
    return(pi * r * r)

6.3 Import

6.3.2 全部引入


如果你直接改了mymodule.py內容,執行import mymodule並不會重新load它,必需要使用imp.reload(mymodule)

6.3.3 只引入「非私人」物件

module設計者有時會有些objects不希望使用者引入,會在這些物件名稱的開頭加下橫線_,使用者引入時改用:

from mymodul import *

帶有_的objects將不被引入,這些以_開頭的名稱也稱之為private name。

以下存在modtest.py

"""modtest: our test module"""
def f(x):
    return x

_b = 2
def _g(x):
    return x+_b
    
a = f(3)+_g(1)

帶有_名稱的物件通常是為設計模組功能時,所需的過渡資訊,但其內容不希望被使用者改變而連動影響其他功能。

6.4 Scoping rules

物件定義探尋原則。

程序在使用到某個物件時怎麼找出它的定義,要看它是在那裡提到:

  • Local namespace: 程序目前正在執行程序內所定義的物件稱之為local namespace的物件。輸入locals()來查看。

  • Global namespace: 主程式所定義的物件稱之為global namespace的物件。輸入globals()來查看。

  • Built-in namespace:
    Python一啟動就定義的物件稱之為built-in namespace的物件。使用__builtints__.xxxx來延伸查詢。

物件定義探尋原則

Figure 6.1: 物件定義探尋原則

程式沒在執行時,local和global namespace相同。程式在執行而進入到function內時,function內的namespace為local namespace,它不包含在global namespace。