Python學習17:模塊和包的導入

筆者: 出處:https://blog.csdn.net/JackMengJin 筆者原創,文章轉載需註明,如果喜歡請點贊+關注,感謝支持!

 

目錄

Python的模塊導入

1.什麼是模塊?什麼是包?

1.1 Python 模塊(Module)

1.2 什麼是包?

1.3 模塊分類

1.4 內置模塊

1.5 第三方模塊

1.6 爲什麼包裏必須有__init__?

2. 模塊導入

2.1導入模塊的方法

2.2 導入內置模塊

2.3 導入第三方模塊

2.4 導入自定義模塊

2.5 必須掌握的導入方法

2.6 需要了解的導入方法

2.7 相對路徑導入

2.8 注意事項


 

Python的模塊導入

1.什麼是模塊?什麼是包?

1.1 Python 模塊(Module)

模塊其實就是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和Python語句。

.py結尾的文件就是一個python模塊。比如比較常見的模塊如下:

os模塊:

os.remove() 刪除文件 
os.rename() 重命名文件 
os.listdir() 列出指定目錄下所有文件 
os.chdir() 改變當前工作目錄
os.getcwd() 獲取當前文件路徑
os.mkdir() 新建目錄
os.rmdir() 刪除空目錄(刪除非空目錄, 使用shutil.rmtree())
os.makedirs() 創建多級目錄
os.removedirs() 刪除多級目錄
os.stat(file) 獲取文件屬性
os.path.split(filename) 將文件路徑和文件名分割(會將最後一個目錄作爲文件名而分離)
os.path.splitext(filename) 將文件路徑和文件擴展名分割成一個元組
os.path.dirname(filename) 返回文件路徑的目錄部分
os.path.join(dirname,basename) 將文件路徑和文件名湊成完整文件路徑
os.path.abspath(name) 獲得絕對路徑
os.path.splitunc(path) 把路徑分割爲掛載點和文件名
os.path.exists() 判斷文件或目錄是否存在
os.path.isabs() 如果path是絕對路徑,返回True
os.path.realpath(path) 返回path的真實路徑
os.path.isdir() 判斷name是不是一個目錄,name不是目錄就返回false

datetime和time模塊:


datetime.date.today() 本地日期對象,(用str函數可得到它的字面表示)
datetime.date.isoformat(obj) 當前[年-月-日]字符串表示
datetime.date.fromtimestamp() 返回一個日期對象,參數是時間戳,返回 [年-月-日]
datetime對象:
datetime.datetime.today() 返回一個包含本地時間(含微秒數)的datetime對象
datetime.datetime.now([tz]) 返回指定時區的datetime對象
datetime.fromtimestamp(timestamp[,tz]) 按時間戳返回一個datetime對象,可指定時區,可用於strftime轉換爲日期表示 
datetime.utcfromtimestamp(timestamp) 按時間戳返回一個UTC-datetime對象
datetime.datetime.strptime(‘2014-03-16 12:21:21‘,”%Y-%m-%d %H:%M:%S”) 將字符串轉爲datetime對象
datetime.datetime.strftime(datetime.datetime.now(), ‘%Y%m%d %H%M%S‘) 將datetime對象轉換爲str表示形式
datetime.date.today().timetuple() 轉換爲時間戳datetime元組對象,可用於轉換時間戳
datetime.datetime.now().timetuple()
time.time() 當前時間戳

random模塊,這個模塊大家肯定不陌生,之前用到過:

random.random() 產生0-1的隨機浮點數
random.uniform(a, b) 產生指定範圍內的隨機浮點數
random.randint(a, b) 產生指定範圍內的隨機整數
random.randrange([start], stop[, step]) 從一個指定步長的集合中產生隨機數

math模塊:

ceil:取大於等於x的最小的整數值,如果x是一個整數,則返回x
copysign:把y的正負號加到x前面,可以使用0
cos:求x的餘弦,x必須是弧度
degrees:把x從弧度轉換成角度
e:表示一個常量
exp:返回math.e,也就是2.71828的x次方
expm1:返回math.e的x(其值爲2.71828)次方的值減1
fabs:返回x的絕對值
factorial:取x的階乘的值
floor:取小於等於x的最大的整數值,如果x是一個整數,則返回自身
fmod:得到x/y的餘數,其值是一個浮點數
frexp:返回一個元組(m,e),其計算方式爲:x分別除0.5和1,得到一個值的範圍
fsum:對迭代器裏的每個元素進行求和操作
gcd:返回x和y的最大公約數
hypot:如果x是不是無窮大的數字,則返回True,否則返回False
isfinite:如果x是正無窮大或負無窮大,則返回True,否則返回False
isinf:如果x是正無窮大或負無窮大,則返回True,否則返回False
isnan:如果x不是數字True,否則返回False
ldexp:返回x*(2**i)的值
log:返回x的自然對數,默認以e爲基數,base參數給定時,將x的對數返回給定的base,計算式爲:log(x)/log(base)
log10:返回x的以10爲底的對數
log1p:返回x+1的自然對數(基數爲e)的值
log2:返回x的基2對數
modf:返回由x的小數部分和整數部分組成的元組
pi:數字常量,圓周率
pow:返回x的y次方,即x**y
radians:把角度x轉換成弧度
sin:求x(x爲弧度)的正弦值
sqrt:求x的平方根
tan:返回x(x爲弧度)的正切值
trunc:返回x的整數部分

模塊其實就是讓你能夠有邏輯地組織你的 Python 代碼段

所以把相關的代碼分配到一個模塊裏可以讓代碼更好用,更易懂。

在模塊能定義函數,類和變量,模塊裏也能包含可執行的代碼。

 

1.2 什麼是包?

包是一種通過".模塊名"來組織python模塊名稱空間的方式.我們穿件的每個文件夾都可以被稱爲包。

但是要注意, 包內必須存在__init__.py文件。

包的定義:文件夾,必須存在__init__.py文件,是模塊和子包的集合體。

也就是包和模塊的區別:

模塊指的是.py結尾的文件,而包指的是一個存在__init__.py文件的文件夾。

包的作用:

包的本質就是一個文件夾,那麼文件夾唯一的功能就是將文件組織起來。

隨着功能越寫越多,我們無法將所有功能都放在一個文件夾中,於是我們使用模塊去組織功能。

隨着模塊越來越多,我們就需要用文件夾將模塊文件組織起來,以此來提高程序的結構性和可維護性。

總結模塊和包的定義:

模塊:.py結尾的文件。模塊裏存放着各種Python 代碼段,可以定義類和對象、函數等等。

使用的話直接去導入模塊直接去使用相應的代碼塊。

包:包就是用來存放模塊的文件夾,同時該文件夾裏有__init__.py文件。

 

1.3 模塊分類

模塊一般分成3類:內置模塊、第三方模塊、自定義模塊

  • 內置模塊:Python自帶模塊,自己定義好的,一般import+模塊即可。
  • 第三方模塊:第三方模塊需要先在命令行輸入pip install requests安裝,安裝後才能導入。
  • 自定義模塊:自己寫的模塊,通常放在包,from包import模塊。

 

1.4 內置模塊

常用的內置模塊有:os模塊、json模塊、shelve模塊(open函數)、xml模塊、logging模塊等等,還有上面1.1中提到的其他模塊都是內置模塊。

相應的內置模塊用法後面會詳細出專題一一說明,這裏先去了解什麼是內置模塊和有哪些常用的內置模塊即可。

 

1.5 第三方模塊

常用的第三方模塊有:

requests(第三方模塊)Requests: HTTP for Humans

對HTTP協議進行高度封裝的庫,比系統自帶的urllib系列的庫好用很多。2、3兼容的庫。

MySQL-python(第三方模塊)https://pypi.python.org/pypi/MySQL-python/1.2.4

把數據寫入MySQL裏面。

sympy模塊(第三方模塊):https://docs.sympy.org/0.7.1/guide.html#guide

sympy是一個Python的科學計算庫,用一套強大的符號計算體系完成諸如多項式求值、求極限、解方程、求積分、微分方程、級數展開、矩陣運算等等計算問題訪問。

等等還有很多強大的第三方模塊,後續等需要用到的時候再詳細討論。

自定義模塊:

關於自定義模塊其實不想說太多,所有自己寫的.py文件都是自定義模塊,就不單獨放在一個三級目錄了。

 

1.6 爲什麼包裏必須有__init__?

這是因爲將一個包作爲模塊導入的時候,實際上導入了它的 __init__.py 文件。

而一個包是一個帶有特殊文件 __init__.py 的目錄。__init__.py 文件定義了包的屬性和方法。

__init__可以什麼也不定義,可以只是一個空文件,但是必須存在。

如果 __init__.py 不存在,這個目錄就僅僅是一個目錄,而不是一個包,它就不能被導入或者包含其它的模塊和嵌套包。

也就是說__init__.py 控制着包的導入行爲,它的作用就是使其可以被導入,並可以導入包裏的模塊。

 


2. 模塊導入

2.1導入模塊的方法

  • improt 模塊名——調用:模塊名.功能名
  • import 模塊名 as 別名——調用:別名.功能名
  • from 模塊名 import 功能名——調用:直接功能名
  • from 模塊名 import 功能名 as 別名——調用: 直接拿別名來用
  • from 模塊名 import * (用 * 號 一次性導入所有功能)——調用:直接功能名

 

2.2 導入內置模塊

導入內置模塊是最簡單的,直接import+模塊即可,不用考慮路徑問題:

import math
import logging

 

2.3 導入第三方模塊

第三方模塊一般存放在site-packages文件夾下:

選用導入方法一般用from 模塊名 import 功能名——調用:直接功能名。

如果第三方模塊是存放在site-packages文件夾下的話,同樣不需要考慮路徑問題。

 

2.4 導入自定義模塊

導入自定義模塊涉及到路徑相關的內容。

  • 最簡單粗暴的方法:直接將自定義的模塊放到python的安裝目錄下,注意是根目錄,不要放在文件夾內。

這樣就可以直接導入了,但缺點是一旦自定義的模塊多了,python安裝目錄就會顯得十分雜亂。

  • 通過sys模塊導入自定義模塊的path:

sys模塊是python內置的,因此我們導入自定義模塊的步驟如下:

  1. 先導入sys模塊

  2. 然後通過sys.path.append(path) 函數來導入自定義模塊所在的目錄

  3. 導入自定義模塊。

  • 模塊在不同包下如何導入?
from 包名稱.模塊名 import sth 

import 包名稱.模塊名

需要注意的是用該方法模塊必須在包裏,也就是有__init__.py文件的文件夾下才能用此方法,在上面的1.6中提到了。

 

2.5 必須掌握的導入方法

雖然模塊導入的方法有很多種。但推薦給大家使用的還是下面兩種方法:

 import ...   直接導入模塊/包

對於包來說不要直接去導入,因爲包太複雜,涉及到非常多的模塊纔會用包去管理。所以最好不要用import去導其他的東西,也不要用import導入函數、類和對象、模塊。

import只用在一個場景,就是用於導入內置模塊和第三方模塊。

 from ... import ...

這種導入方法更加靈活,可以有很多導入形式,可以導入模塊,函數,類,對象,變量。

但使用的時候一定要注意避免導入的函數和內部文件的函數不重名!!!

不重名的情況下才能導入用於導入自定義模塊項目的根目錄!!!

 

2.6 需要了解的導入方法

  • from sth import*

在使用from sth import* 語法時,可以一次導入指定模塊內的所有成員。

但及其不推薦大家使用,是因爲它存在潛在的風險。比如同時導入 module1 和 module2 內的所有成員,假如這兩個模塊內都有一個同樣名稱的函數,那麼當在程序中執行時就會出現異常。

  • from sth import sth as other

這個方法就是給模塊起別名,一般情況下也不推薦,防止修改完別名後忘記。

 

2.7 相對路徑導入

from. import module

.表示當前目錄,就是一個.表示同級目錄,也就是當前目錄。

..表示上一級目錄,用兩個..表示。

...表示上上一級,用三個...表示。

以此類推。方法類似Linux。

但是絕對路徑導入不被Python官方推薦,所以不建議用,這裏只瞭解即可。

 

2.8 注意事項

最常用的模塊導入方法就是import和 from ... import ...,其他的最好不用,瞭解即可。

導入自定義模塊時需要注意自定義模塊不要和內置模塊或其他模塊重名!

包內必須存在__init__.py文件!用來對包的導入和包裏模塊的導入!

具體模塊導入和包的導入會在後面的學習中逐步講解。

 


以上是《Python學習17:模塊和包的導入》的所有內容,敬請期待。原創不易,如果喜歡請點贊和關注,謝謝大家的支持!

想獲得免費的學習資料請添加微信公衆號——,期待您的關注~

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章