1.9【Python】第九章 模塊

人工智能入門與實戰(zhàn)第一季:python基礎(chǔ)語法

什么是模塊

python程序是由一個個的模塊組成的柬唯,而每一個模塊又包含對應(yīng)功能的代碼:比如函數(shù)认臊、變量、類锄奢、其他代碼段等等失晴。

我們在第一章講寫第一個python程序的時候剧腻,曾經(jīng)通過集成開發(fā)環(huán)境IDLE創(chuàng)建了一個python的程序文件:lovechina.py,這個文件就是一個模塊涂屁。盡管它只有兩個打印語句书在,但也是一個模塊。

所以python中的模塊是以.py為后綴的文件胯陋,我們可以通過模塊避免變量蕊温、函數(shù)的命名沖突袱箱,以及方便的對代碼進行組織遏乔、和管理。

模塊的分類:
1发笔、系統(tǒng)模塊盟萨,也叫標(biāo)準(zhǔn)模塊
我們在第二章講到數(shù)學(xué)函數(shù)的時候第一次使用了python標(biāo)準(zhǔn)模塊庫中的數(shù)學(xué)模塊:math.py

# 導(dǎo)入math庫
import math

# 冪運算
print(math.pow(2,3))

標(biāo)準(zhǔn)模塊庫中還有一個內(nèi)置模塊:builtins.py,我們最早接觸的print()了讨、len()捻激、max()等函數(shù)便來至于此內(nèi)置模塊,內(nèi)置模塊是系統(tǒng)默認(rèn)導(dǎo)入到解釋器中的前计,所以我們無需導(dǎo)入這個模塊胞谭。

所有標(biāo)準(zhǔn)庫請到python官網(wǎng)查看:https://docs.python.org/zh-cn/3/

2、第三方模塊
由第三方開發(fā)人員提供男杈,以下列舉部分第三方模塊丈屹。
數(shù)據(jù)分析:numpy、scipy伶棒、pandas
機器學(xué)習(xí):Scikit-learn旺垒、Tensorflow
web開發(fā):Django、Flask

第三方模塊使用之前需要安裝肤无,例如安裝numpy先蒋,在終端輸入命令:

pip install numpy

由于mac系統(tǒng)默認(rèn)安裝了python2.x版本,使用pip則表示使用的是python2.x版本宛渐,如果使用python3.x版本安裝竞漾,應(yīng)使用pip3

由于安裝第三方庫,有時候還會有連串的依賴問題窥翩,所以安裝第三方庫更簡單的方式是使用Anaconda业岁,我們在講到python科學(xué)計算庫的時候會介紹它的安裝和使用…

3、自定義模塊
我們創(chuàng)建的任意一個后綴為.py的模塊鳍烁,都是自定義模塊叨襟。

導(dǎo)入模塊的幾種方式

1、import module1, module2…
最常用的導(dǎo)入模塊的方式幔荒,將一個或多個模塊導(dǎo)入糊闽,導(dǎo)入模塊一般在寫在文件的最上方梳玫。
我們前面舉的導(dǎo)入數(shù)學(xué)模塊的例子:

import math
# 冪運算
print(math.pow(2,3))

2、from module_name import name1, name2 …
從某個模塊導(dǎo)入某個或多個指定內(nèi)容

from math import pow
# 無需使用模塊名稱math右犹,可直接使用pow方法
print(pow(2, 3))

# 導(dǎo)入math模塊中的所有內(nèi)容
from math import *

print(pow(2, 3))
print(floor(1.2))

3提澎、import…as…
我們把導(dǎo)入的模塊或函數(shù)進行重命名

# 導(dǎo)入模塊,并重命名
import math as my_math
print(my_math.pow(2, 3))

sys.path 的使用

sys是標(biāo)準(zhǔn)模塊之一念链,sys.path包含解釋器查找模塊的路徑盼忌,當(dāng)你導(dǎo)入一個模塊時,解釋器將會從這些路徑中去查找這個模塊掂墓,我們可以打印出來看一下它里面的路徑:

import sys
print(sys.path)

為了解釋sys.path的作用谦纱,接下來我們舉例:

1、我們先創(chuàng)建一個main文件夾君编,里面創(chuàng)建一個模塊:se1_ch9_module_package.py跨嘉,然后再創(chuàng)建另外一個test_path1文件夾,里面創(chuàng)建一個模塊:se1_ch9_test_path1.py吃嘿,如下圖所示:

2祠乃、此時我們會發(fā)現(xiàn)se1_ch9_module_package.py模塊與se1_ch9_test_path1.py模塊不在同一個目錄下,接下來我們想在前者模塊中導(dǎo)入后者模塊兑燥,并調(diào)用后者模塊的test函數(shù):

from test_path1 import se1_ch9_test_path1
se1_ch9_test_path1.test()

我們發(fā)現(xiàn)報錯了亮瓷!為什么?我們在上面說了降瞳,當(dāng)我們導(dǎo)入一個模塊時解釋器會從sys.path中的所有路徑中去查找有沒有這個模塊嘱支,很明顯../test_path1/ 這個路徑并不在sys.path中。

3力崇、解決這個問題很簡單斗塘,在sys.path中加入這個路徑即可,在se1_ch9_module_package模塊中做以下操作:

方式1:在sys的path中加入當(dāng)前模塊的上一層路徑

sys.path.append("../")

再打印sys.path 我們會發(fā)現(xiàn)多了一個路徑'../'

print(sys.path)

我們發(fā)現(xiàn)此時可以正常導(dǎo)入se1_ch9_test_path1模塊

from test_path1 import se1_ch9_test_path1
se1_ch9_test_path1.test()

方式2:在sys的path中加入test_path1路徑

sys.path.append("../test_path1")

可以直接導(dǎo)入模塊

import se1_ch9_test_path1
se1_ch9_test_path1.test()

包用來管理我們創(chuàng)建的模塊亮靴,包的出現(xiàn)可以解決如下問題:
1馍盟、我們在實際的開發(fā)過程中會創(chuàng)建多個模塊,這些模塊需要分類管理
2茧吊、解決命名沖突問題:不同的開發(fā)者之間可能會創(chuàng)建相同名稱的模塊贞岭,甚至相同名稱的模塊下會有相同的函數(shù),如果開發(fā)人員在一個項目開發(fā)程序搓侄、或者你寫的程序提供給別人使用的時候瞄桨,都會產(chǎn)生命名沖突的問題。

創(chuàng)建包
1讶踪、在對應(yīng)的文件夾下右鍵芯侥,New-Python Package

成功創(chuàng)建包之后,會默認(rèn)生成init.py模塊。

2柱查、創(chuàng)建包舉例:比如我們給別人寫一個播放器廓俭,我們創(chuàng)建了一個player_package包,然后創(chuàng)建一個player_manager.py模塊唉工,里面寫一個play函數(shù)研乒;創(chuàng)建一個ui子包,子包中可以繼續(xù)創(chuàng)建和ui界面相關(guān)的模塊淋硝。

導(dǎo)入包
以上述創(chuàng)建的player_package包為例雹熬,在主模塊se1_ch9_module_package中導(dǎo)入player_package包:
首先在se1_ch9_module_package中加入如下代碼:

#在sys的path中加入當(dāng)前模塊的上一層路徑
sys.path.append("../")

以下為幾種導(dǎo)入包的方式:
1、第一種導(dǎo)入方式:包名.模塊名

import player_package.player_manager
# 調(diào)用play方法谣膳,使用時需要攜帶包名
player_package.player_manager.play()

輸出結(jié)果:
播放...

2竿报、第二種導(dǎo)入方式:from 包名 import 模塊名

from player_package import player_manager
player_manager.play()

3、第三種導(dǎo)入方式:from 包名 import *
使用這種導(dǎo)入方式需要在被導(dǎo)入包的init.py文件中 事先定義好要被導(dǎo)入的模塊参歹,否則將無法導(dǎo)入仰楚。

  • 在player_package包的init.py中加入如下代碼:

__all__ = ['player_manager']

好了,這樣我們在主模塊中使用 from player_package import *犬庇,就可以把player_manager模塊導(dǎo)入進來了。

from player_package import *
player_manager.play()
  • 同樣侨嘀,如果我們希望把ui包中的player_controller模塊導(dǎo)入進來臭挽,需要在ui包中的init.py模塊中加入如下代碼:
__all__ = ['player_controller']

然后在主模塊中導(dǎo)入player_controller模塊:

from player_package.ui import *
player_controller.show()

輸出結(jié)果:
展示播放界面

本章總結(jié):

本章應(yīng)該比其他章節(jié)內(nèi)容少一些,也簡單一些咬腕,主要了解什么是模塊欢峰,怎么創(chuàng)建模塊,怎么導(dǎo)入模塊涨共,然后了解什么是包纽帖,怎么創(chuàng)建包和導(dǎo)入包即可。

本章就到這里举反,我是豬弟爸爸懊直,這里我會持續(xù)更新人工智能自學(xué)內(nèi)容,有問題請關(guān)注我的公眾號zhudipapa火鼻,我會統(tǒng)一在公眾號下方回復(fù)室囊,我們下節(jié)見。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魁索,一起剝皮案震驚了整個濱河市融撞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粗蔚,老刑警劉巖尝偎,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鹏控,居然都是意外死亡致扯,警方通過查閱死者的電腦和手機趁窃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來急前,“玉大人醒陆,你說我怎么就攤上這事●烧耄” “怎么了刨摩?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長世吨。 經(jīng)常有香客問我澡刹,道長,這世上最難降的妖魔是什么耘婚? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任罢浇,我火速辦了婚禮,結(jié)果婚禮上沐祷,老公的妹妹穿的比我還像新娘嚷闭。我一直安慰自己,他們只是感情好赖临,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布胞锰。 她就那樣靜靜地躺著,像睡著了一般兢榨。 火紅的嫁衣襯著肌膚如雪嗅榕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天吵聪,我揣著相機與錄音凌那,去河邊找鬼。 笑死吟逝,一個胖子當(dāng)著我的面吹牛帽蝶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播澎办,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼嘲碱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了局蚀?” 一聲冷哼從身側(cè)響起麦锯,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琅绅,沒想到半個月后扶欣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年料祠,在試婚紗的時候發(fā)現(xiàn)自己被綠了骆捧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡髓绽,死狀恐怖敛苇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顺呕,我是刑警寧澤枫攀,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站株茶,受9級特大地震影響来涨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜启盛,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一蹦掐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僵闯,春花似錦卧抗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牺弹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間时呀,已是汗流浹背张漂。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谨娜,地道東北人航攒。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像趴梢,于是被迫代替她去往敵國和親漠畜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 模塊和包 一 模塊 1 什么是模塊? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件彰阴,文件名就是...
    go以恒閱讀 2,261評論 0 4
  • 微信公眾號:一個優(yōu)秀的廢人如有問題或建議瘾敢,請后臺留言,我會盡力解決你的問題。 前言 我是狗哥簇抵,一名程序猿庆杜。做過 A...
    JavaFish閱讀 704評論 0 3
  • 當(dāng)前目錄 和 腳本目錄 參考資料:https://techibee.com/python/get-current-...
    ThomasYoungK閱讀 10,806評論 0 11
  • If you quit from the Python interpreter and enter it agai...
    linyk3閱讀 352評論 0 0
  • 懷俠閱讀 145評論 0 0