這是自己做的練習,可能有錯誤,歡迎討論和各種最佳化重構方案。
12-1.
路徑搜尋和搜尋路徑。路徑搜尋和搜尋路徑之間有什麼不同。
【答案】
路徑搜尋(Search Path)搜尋路徑(Path Search),前者指尋找某個檔案的操作(the pursuit of a file),後者是去尋找一組目錄(through a set of directories)。本文來自部落格園balian
預設搜尋路徑是編譯或者安裝時指定。查看當前搜尋路徑參看下例。可以用列表的append()方法添加搜尋路徑。
>>> import sys>>> sys.path['', 'D:\\Python27\\python27.zip', 'D:\\Python27\\DLLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win', 'D:\\Python27\\lib\\lib-tk', 'D:\\Python27', 'D:\\Python27\\lib\\site-packages']>>>
12-2.
匯入屬性。假設你的模組mymodule裡面有一個foo()函數。
(a)把這個函數匯入到你的名稱空間有哪兩種方法?
(b)這兩種方法匯入後的名稱空間有什麼不同?
【答案】
(a)使用import語句(import module)和使用from-import語句(from module import)。避免使用from module import *語句。
(b)使用from-import語句,foo()被直接匯入到局部名字空間去了,所以它必須被直接使用,而不能加上模組名的限定。
如果用12-1題的sys模組中path()函數作為例子:
採用第一種方法(import module)代碼如下:
>>> import sys>>> sys.path # 需要加上模組名的限定['', 'D:\\Python27\\python27.zip', 'D:\\Python27\\DLLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win', 'D:\\Python27\\lib\\lib-tk', 'D:\\Python27', 'D:\\Python27\\lib\\site-packages']>>> path # 注意這裡的錯誤,path()不可以直接使用Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'path' is not defined>>>
採用第二種方法(from module import)代碼如下:
>>> from sys import path>>> sys.path # 主要這裡的錯誤,不能加上模組名的限定Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'sys' is not defined#本文來自部落格園balian>>> path # path()必須直接使用['', 'D:\\Python27\\python27.zip', 'D:\\Python27\\DLLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win', 'D:\\Python27\\lib\\lib-tk', 'D:\\Python27', 'D:\\Python27\\lib\\site-packages']>>>
【參考】
python模組的匯入的兩種方式區別詳解
http://developer.51cto.com/art/201003/189555.htm
python匯入模組的三種方法
http://www.docin.com/p-56218303.html
12-3.
匯入“import module”和“from module import *”有什麼不同?
【答案】
“from module import *”可以把指定模組的所有名稱匯入到當前的名稱空間,但這種用法必須受到限制。參見本書317頁。