python菜鳥教程學習11:模塊

  若是你從 Python 解釋器退出再進入,那麼你定義的全部的方法和變量就都消失了。爲此 Python 提供了一個辦法,把這些定義存放在文件中,爲一些腳本或者交互式的解釋器實例使用,這個文件被稱爲模塊。模塊是一個包含全部你定義的函數和變量的文件,其後綴名是.py。模塊能夠被別的程序引入,以使用該模塊中的函數等功能。這也是使用 python 標準庫的方法。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變量。spa

  sys.path 輸出是一個列表,其中第一項是空串'',表明當前目錄(如果從一個腳本中打印出來的話,能夠更清楚地看出是哪一個目錄),亦即咱們執行python解釋器的目錄(對於腳本的話就是運行的腳本所在的目錄)。命令行

  若是你打算常常使用一個函數,你能夠把它賦給一個本地的名稱:code

>>> 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的區別blog

  funcname 被直接導入到本地名字空間去了,因此它能夠直接使用,而不須要加上模塊名的限定* 表示,該模塊的全部公共對象(public objects)都被導入到當前的名稱空間,也就是任何只要不是以」_」開始的東西都會被導入。 字符串

深刻模塊it

  模塊除了方法定義,還能夠包括可執行的代碼。這些代碼通常用來初始化這個模塊。這些代碼只有在第一次被導入時纔會被執行。每一個模塊有各自獨立的符號表,在模塊內部爲全部的函數看成全局符號表來使用。因此,模塊的做者能夠放心大膽的在模塊內部使用這些全局變量,而不用擔憂把其餘用戶的全局變量搞混。從另外一個方面,當你確實知道你在作什麼的話,你也能夠經過 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 這種導入形式,除了最後一項,都必須是包,而最後一項則能夠是模塊或者是包,可是不能夠是類,函數或者變量的名字。

相關文章
相關標籤/搜索