05.27 第三章 模塊組織

Python 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和Python語句。其中主要解決特定問題的代碼片段。模塊讓你能夠有邏輯地組織你的 Python 代碼段。把相關的代碼分配到一個模塊裡能讓你的代碼更好用,更易懂。模塊能定義函數,類和變量,模塊裡也能包含可執行的代碼。

在Python中有2個內建變量指向當前模塊的信息:

__name__ 當前模塊名稱

__file__ 模塊所在全路徑

說明:

1、如果模塊的 __name__ 是__main__,那麼這段代碼是從命令行調用的。

2、python自帶的 platform 模塊記錄的當前使用python的信息。

包是一個分層次的文件目錄結構,它定義了一個由模塊及子包,和子包下的子包等組成的 Python 的應用環境。

簡單來說,包就是文件夾,但該文件夾下必須存在 __init__.py 文件, 該文件的內容可以為空。__int__.py用於標識當前文件夾是一個包。

Import

模塊定義好之後可以用import關鍵字導入。當解釋器遇到 import 語句,如果模塊在當前的搜索路徑就會被導入。一個模塊只會被導入一次,不管執行了多少次import。這樣可以防止導入模塊被一遍又一遍地執行。

如果需要再次導入則需要調用函數 reload()

import math #導入math庫

reload(math) #再次導入math庫,注意這裡使用的是模塊名 math 而不是字符串 "math"

搜索路徑是一個解釋器會先進行搜索的所有目錄的列表。Python 解析器對模塊位置的搜索順序是:

- 當前目錄

- 如果不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個目錄。

- 如果都找不到,Python會察看默認路徑。UNIX下,默認路徑一般為/usr/local/lib/python/。

模塊搜索路徑存儲在 system 模塊的 sys.path 變量中。變量裡包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。

不論是import還是 from import 如果應用的模塊包含在包中,則需要加包名。

import pack.module

from pack.module import define

可以使用 as 語法給導入的函數或者模塊起別名,防止命名衝突或者函數名等過長。

import

module as name

form module import func as name

1、引入模塊

引入方式:import module1[, module2[,... moduleN]

調用方式:module1.xxxx (xxx表示module1中的變量,函數或者類)

2、引入部分定義

引入方式:form module import name1[, name2[, ... nameN]]

調用方式:name1

from 語句從模塊中導入一個指定的部分到當前命名空間中。與import區別,import引入的是模塊,使用模塊內容需要使用模塊名這個命名空間。

3、引入模塊的所有內容

引入方式:from module import *

把一個模塊的所有內容全都導入到當前的命名空間

導入模塊

1、同級別模塊

import xxx

2、子級別模塊

子級別使用 __init__.py表示這是一個Python包

import yyy.xxx

3、上級別模塊

當使用import語句導入模塊時,解釋器會搜索當前模塊所在目錄以及sys.path指定的路徑去找需要import的模塊。

可以將上級目錄加入 sys.path

sys.path.append('../ccc')

命名空間&作用域

執行函數時,會創建(激活)屬於自己的命名空間。當函數調用結束時,它的命名空間也將停止(隱藏)。

每個程序函數都有自己的命名空間,並沒有語句塊作用域比如if/for/while/try等,用來定義變量的作用域。控制語句內的變量可以在控制語句之外,當前函數內使用。命名控件中包含一個字典,字典記錄變量名與Python對象的關係

變量被映射到具體的Python對象,命名空間是一個包含了變量名稱們(鍵)和它們各自相應的對象們(值)的字典。

一個 Python 表達式可以訪問局部命名空間和全局命名空間裡的變量。如果一個局部變量和一個全局變量重名,則局部變量會覆蓋全局變量。如果要給函數內的全局變量賦值,必須使用 global 語句。

global VarName 語句的作用就是告訴當前局部作用域,使用的VarName 是一個全局變量。

每個程序、模塊、函數、類都有自己的命名空間。

以下是與命名空間相關的函數,B,C可以用於調試診斷,一般多在函數內部調用:

A、dir() 函數可以查看一個模塊中定義的名稱(函數、變量)

B、globals() 返回可用的全局變量,結果是字典,可以使用 keys或者values

C、locals() 返回可用的局部變量,結果是字典

作用域搜索規則:

L:本地

E:封閉,應用於函數定義函數,即在函數內部定義一個函數,E代指定義函數層。

G:全局

B:內置(python __buildin__)


分享到:


相關文章: