Python-模組
1、前言
在python中,一個py檔案就是一個模組,可以作為模組被匯入和引用,在python中使用模組會使得程式結構更加清晰,維護起來也更加方便。每次程式設計定義的變數,函式隨著py檔案的關閉就會被記憶體釋放,現在通過把這些方法放在py檔案中可以通過匯入的方式呼叫,極大的提升了程式的效率!
2、模組詳細
-
定義:模組就是一系列功能的結合體
-
模組的分類:
- 內建模組
- 第三方模組
- 自定義模組
-
模組的四種表現形式:
- 使用python編寫的程式碼(.py檔案)
- 已被編譯為共享庫或DLL的C或C++擴充套件
- 包好一組模組的包(資料夾)(包裡面通常有一個雙下init.py檔案)
- 使用C編寫並連結到python直譯器的內建模組
3、import句式
-
想匯入py檔案,只需要使用import語句即可
-
格式:import 模組名
1、內建模組
內建模組匯入示例:
'''匯入內建模組'''
import time
time.sleep(1) # 一秒後執行print
print('累了,睡1秒')
# 結果
# 累了,睡1秒
2、自定義模組
自定義模組示例:
'''匯入自定義模組'''
'''test.py'''
print('聽說你想匯入我?')
a = 1
b = 2
'''module.py'''
# 匯入自定義模組
import test
if test.a>test.b:
print('用匯入模組的值來比較,a大')
else:
print('用匯入模組的值來比較,b大')
# 結果
# 聽說你想匯入我?
# 用匯入模組的值來比較,b大
'''module.py'''
# 匯入自定義模組
import test
import test
import test
import test
# 結果
# 聽說你想匯入我?
注意:多次匯入相同模組,只會執行一次
3、第三方模組
第三方模組示例:
python內的第三方模組,需要下載,只要找到想下載的模組,通過pip即可安裝,在pycharm安裝也非常方便,另外給大家推薦Anaconda,下載好好多第三方模組不需要下載。
-
沒有pip的小夥伴點?[pip官網](pip · PyPI)
-
沒有Anaconda的小夥伴點?[Anaconda官網](Anaconda | Individual Edition)
-
沒有pycharm的小夥伴點?[pycharm官網](PyCharm: the Python IDE for Professional Developers by JetBrains)
pip安裝命令:pip install 包名/模組名
pycharm安裝步驟:
- Settings>>Project>>Python interpreter
因為我使用的是pycharm,給大家舉個例子:
'''使用第三方模組'''
'''使用第三方模組'''
import requests
url = 'https://www.baidu.com/'
res = requests.get(url)
print(res.status_code)
print(res.text)
# 結果大家自己動動手叭~
4、import底層原理
- import語句匯入模組之後,通過模組點的方式就可以使用到模組中所有的名字,並且肯定不會產生衝突!
示例如下:
- 首次匯入模組發生的事:
- 執行匯入檔案(import句式.py)產生該檔案的全域性名稱空
- 執行test.py檔案
- 產生test.py全域性名稱空間 執行test檔案內程式碼 將產生的名字全部存檔於test.py名稱空間
- 在匯入檔名稱空間產生一個test的名字指向test.py全域性名稱空間
- 圖示如下:
4、from /import句式
- from/import語句與import大致一樣,使用from/import句式可以直接引用被匯入檔案中的名字使用
test.py檔案上面定義好了,例項如下:
'''module.py'''
# 匯入自定義模組
from test import a
print(a)
a = a+1
print(a)
# 結果
聽說你想匯入我?
1
2
'''顯然module.py中沒有a,a被匯入到當前名稱空間,可以直接使用,也可以對a進行修改'''
- from/import語句支援將檔案所有名字匯入
- 格式:from 模組名(檔名)import *
'''module.py'''
# 匯入自定義模組
from test import *
print(a,b)
#結果
聽說你想匯入我?
1 2
匯入模組的擴充套件用法
-
起名
既可以給模組名起別名也可以給模組中某個名字起別名
例項如下:
import test as t print(t.a) from test import a as A print(A) # a的結果都為1
-
連續匯入
- 格式:import 模組1,模組2
- 格式2:from 模組名1 import 名字1,名字2,名字3
- 可以連續匯入多個模組,但是隻有當多個模組功能相似或者屬於同一個系列
- 如果功能不同並且不屬於一個系列 那麼推薦分行匯入
- import 模組名1
import 模組名2
-
通用匯入
格式:__ all __ = [‘名稱1’ , ‘名稱2’]
例項如下:
'''test.py''' print('聽說你想匯入我?') a = 1 b = 2 # 只允許使用名稱a __all__ = ['a'] # 如果匯入所有名稱,只能使用a,使用其他名稱報錯 '''module.py''' # 匯入自定義模組 from test import * print(a,b) # NameError: name 'b' is not defined
5、模組匯入的順序
- 先從記憶體中查詢
- 再去內建模組中查詢
- 最後去sys.path系統路徑查詢(自定義模組)
- 最後如果沒有查詢到則報錯
例項如下:
import sys
print(sys.path)
'''結果中第一個元素永遠是當前執行檔案所在的路徑'''
當某個自定義模組查詢不到的時候解決方案
1.自己手動將該模組所在的路徑新增到sys.path中
import sys
sys.path.append(r'E:\fourth\test.py')
2.from...import...句式
from 資料夾名稱.資料夾名稱 import 模組名
from 資料夾名稱.模組名稱 import 名字
6、補充知識
判斷檔案型別:
if __ name __ = ‘__ main __’: //後期會出一篇有關的教程
作用為判斷py檔案是否作為模組檔案還是執行檔案
迴圈匯入
- 如果在程式設計的時候有迴圈匯入的情況,說明程式設計的不合理。
例如:
修改方法:
- 調整順序:
- 呼叫函式
注意,在自定義模組名的時候,不要和內建模組名相同!