Chapter 6 Python模組
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.1 自選引入
6.3.2 全部引入
from ... import ...
與 import ...
:
如果你直接改了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
來延伸查詢。
程式沒在執行時,local和global namespace相同。程式在執行而進入到function內時,function內的namespace為local namespace,它不包含在global namespace。