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文件是否作為模塊文件還是執行文件
循環導入
- 如果在編程的時候有循環導入的情況,說明程序設計的不合理。
例如:
修改方法:
- 調整順序:
- 調用函數
絕對導入與相對導入
在程序中涉及到多個文件之間導入模塊的情況,一律按照執行文件所在的路徑為准
- 絕對導入
始終按照執行文件所在的sys.path查找模塊
- 相對導入
句點符 .
.表示當前文件路徑
..表示上一層文件路徑
注意!!!
- 相對導入能夠打破以執行文件為准的規則,只考慮兩個文件之間的位置
- 相對導入只能用在模塊文件中,不能在執行文件中使用
注意,在自定義模塊名的時候,不要和內置模塊名相同!