1. 程式人生 > >Python進階【第十篇】模塊(上)

Python進階【第十篇】模塊(上)

path 變量 屬性 一個 第三方 sys pre 應用程序 bsp

·一、模塊

模塊就是一組功能的集合體,我們的程序可以導入模塊來復用模塊裏的功能。為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼就相對較少,很多編程語言都采用這種組織代碼的方式。在Python中,一個.py文件就稱之為一個模塊(Module)

當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。

模塊主要有三種:

  • Python標準庫
  • 第三方模塊
  • 應用程序自定義模塊

另外,使用模塊還可以避免函數名和變量名沖突。相同名字的函數和變量完全可以分別存在不同的模塊中,因此,我們自己在編寫模塊時,不必考慮名字會與其他模塊沖突。但是也要註意,盡量不要與內置函數名字沖突

二、模塊導入

1.import語句

import module1[, module2[,... moduleN]

Python解釋器有自己的搜索路徑,存在sys.path裏,然後通過此路徑找到相應文件。但如果在當前目錄下存在與要引入模塊同名的文件,就會把要引入的模塊屏蔽掉。

引用多個時,用逗號隔開

2.from...import語句

from modname import name1[, name2[, ... nameN]]

此聲明不會把整個modulename模塊導入到當前的命名空間中,只會將它裏面的name1或name2單個引入到執行這個聲明的模塊的全局符號表,要幾個引幾個。

省力的辦法:

from modname import *

該方法可以一次性導入一個模塊中的所有項目,但容易因為引入的其它來源的命名,很可能覆蓋了已有的定義。

3.運行本質

#1 import test
#2 from test import add 

無論1還是2,首先通過sys.path找到test.py,然後執行test腳本(全部執行),區別是1會將test這個變量名加載到名字空間,而2只會將add這個變量名加載進來。

三、包(package)

包就是一個包含有__init__.py文件的文件夾,所以其實創建包的目的就是為了用文件夾將文件/模塊組織起來。

在python3中,即使包下沒有__init__.py文件,import 包仍然不會報錯,而在python2中,包下一定要有該文件,否則import 包報錯。

創建包的目的不是為了運行,而是被導入使用,記住,包只是模塊的一種形式而已,包的本質就是一種模塊

註意事項

1.關於包相關的導入語句也分為import和from ... import ...兩種,但是無論哪種,無論在什麽位置,在導入時都必須遵循一個原則:凡是在導入時帶點的,點的左邊都必須是一個包,否則非法。可以帶有一連串的點,如item.subitem.subsubitem,但都必須遵循這個原則。但對於導入後,在使用時就沒有這種限制了,點的左邊可以是包,模塊,函數,類(它們都可以用點的方式調用自己的屬性)。

2、import導入文件時,產生名稱空間中的名字來源於文件,import 包,產生的名稱空間的名字同樣來源於文件,即包下的__init__.py,導入包本質就是在導入該文件

3、包A和包B下有同名模塊也不會沖突,如A.a與B.a來自倆個命名空間

.py執行時會把自己的上一級目錄加載進去,而上一級目錄所包含的.py文件,即與執行目錄在同一級的文件可直接import,若在同一層有一個包,要引用該包下的模塊或者.py文件,則應

from 包名 import .py

涉及多層的,層與層之間用.連接。

  

Python進階【第十篇】模塊(上)