人工智能入門與實戰(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é)見。