如果你從 Python 解釋器退出再進入,那么你定義的所有的方法和變數就都消失了,為此 Python 提供了一個辦法,把這些定義存放在檔案中,為一些腳本或者互動式的解釋器實體使用,這個檔案被稱為模塊,模塊是一個包含所有你定義的函式和變數的檔案,其后綴名是.py,模塊可以被別的程式引入,以使用該模塊中的函式等功能,這也是使用 python 標準庫的方法,
import sys print('命令列引數如下:') for i in sys.argv: print(i) print('\n\nPython 路徑為:', sys.path, '\n')
import陳述句
想使用 Python 源檔案,只需在另一個源檔案里執行 import 陳述句,一個模塊只會被匯入一次,不管你執行了多少次import,這樣可以防止匯入模塊被一遍又一遍地執行,當我們使用import陳述句的時候,Python解釋器是怎樣找到對應的檔案的呢?這就涉及到Python的搜索路徑,搜索路徑是由一系列目錄名組成的,Python解釋器就依次從這些目錄中去尋找所引入的模塊,這看起來很像環境變數,事實上,也可以通過定義環境變數的方式來確定搜索路徑,搜索路徑是在Python編譯或安裝的時候確定的,安裝新的庫應該也會修改,搜索路徑被存盤在sys模塊中的path變數,
sys.path 輸出是一個串列,其中第一項是空串'',代表當前目錄(若是從一個腳本中列印出來的話,可以更清楚地看出是哪個目錄),亦即我們執行python解釋器的目錄(對于腳本的話就是運行的腳本所在的目錄),
如果你打算經常使用一個函式,你可以把它賦給一個本地的名稱:
>>> fib = fibo.fib >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Python 的 from 陳述句讓你從模塊中匯入一個指定的部分到當前命名空間中
>>> from fibo import fib, fib2 >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
from xx import*和import XX的區別
funcname 被直接匯入到本地名字空間去了,所以它可以直接使用,而不需要加上模塊名的限定* 表示,該模塊的所有公共物件(public objects)都被匯入到當前的名稱空間,也就是任何只要不是以”_”開始的東西都會被匯入,
深入模塊
模塊除了方法定義,還可以包括可執行的代碼,這些代碼一般用來初始化這個模塊,這些代碼只有在第一次被匯入時才會被執行,每個模塊有各自獨立的符號表,在模塊內部為所有的函式當作全域符號表來使用,所以,模塊的作者可以放心大膽的在模塊內部使用這些全域變數,而不用擔心把其他用戶的全域變數搞混,從另一個方面,當你確實知道你在做什么的話,你也可以通過 modname.itemname 這樣的表示法來訪問模塊內的函式,
__name__屬性
一個模塊被另一個程式第一次引入時,其主程式將運行,如果我們想在模塊被引入時,模塊中的某一程式塊不執行,我們可以用__name__屬性來使該程式塊僅在該模塊自身運行時執行,
if __name__ == '__main__': print('程式自身在運行') else: print('我來自另一模塊')
每個模塊都有一個__name__屬性,當其值是'__main__'時,表明該模塊自身在運行,否則是被引入,注意__name__ 與 __main__ 底下是雙下劃線,
dir( )函式
內置的函式 dir() 可以找到模塊內定義的所有名稱,以一個字串串列的形式回傳,
>>> import fibo, sys >>> dir(fibo) ['__name__', 'fib', 'fib2'] >>> dir(sys)
如果沒有給定引數,那么 dir() 函式會羅列出當前定義的所有名稱,
包
包是一種管理 Python 模塊命名空間的形式,采用"點模塊名稱",注意當使用 from package import item 這種形式的時候,對應的 item 既可以是包里面的子模塊(子包),或者包里面定義的其他名稱,比如函式,類或者變數,import 語法會首先把 item 當作一個包定義的名稱,如果沒找到,再試圖按照一個模塊去匯入,如果還沒找到,拋出一個 :exc:ImportError 例外,反之,如果使用形如 import item.subitem.subsubitem 這種匯入形式,除了最后一項,都必須是包,而最后一項則可以是模塊或者是包,但是不可以是類,函式或者變數的名字,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/233800.html
標籤:其他
上一篇:Java基礎 String
