淺析python中的絕對導入和相對導入
在本文中,我們將看到Python中的絕對和相對導入。
Python中導入的工作
Python中的import類似于C/C++中的#include header_file。Python模塊可以通過使用import導入文件/函數(shù)來訪問其他模塊的代碼。import語句是調(diào)用import機制的最常見方式,但它不是唯一的方式。
import語句涉及兩個操作,它搜索模塊,并將搜索結(jié)果綁定到本地作用域中的名稱。當導入模塊時,Python會運行模塊文件中的所有代碼,并使其可用于導入器文件。當一個模塊被導入時,解釋器首先在sys.modules中搜索它,sys. modules是所有先前導入的模塊。如果沒有找到它,那么它將搜索所有具有該名稱的內(nèi)置模塊,如果找到它,那么解釋器將運行所有代碼并使其對文件可用。如果找不到模塊,它將在變量sys. path給出的目錄列表中搜索同名文件。path是一個變量,包含一個路徑列表,其中包含python庫、包和包含輸入腳本的目錄。
例如,導入一個名為math的模塊,然后解釋器在內(nèi)置模塊中搜索它,如果沒有找到,則在sys. path給出的目錄列表中搜索名為math.py的文件。
import math print(math.pi)
import語句的語法
用戶可以導入包和模塊。注意導入一個包實際上是將包的__init__.py文件作為一個模塊導入。用戶還可以從包或模塊導入特定對象。通常有兩種類型的導入語法。當您使用第一個時,您直接導入資源。
import gxg
gxg可以是封裝或模塊。當用戶使用第二種語法時,則用戶從另一個包或模塊導入資源。
from gxg import geek
geek可以是模塊、子包或?qū)ο?,例如類或函?shù)。
導入語句的樣式
PEP 8是python的官方風格指南,它有一套規(guī)則來指導如何制定python代碼以最大限度地提高其可讀性。對于編寫import語句,有以下幾點:
1.導入應該總是寫在文件的頂部,就在任何模塊注釋和文檔字符串之后。
2.導入通常應該用空格分隔。
3.導入應按以下順序分組。
標準庫導入(Python的內(nèi)置模塊)
相關第三方庫
本地應用程序/庫特定導入
import math import os # Third party imports from flask import Flask from flask_restful import Api from flask_sqlalchemy import SQLAlchemy # Local application imports from local_module import local_class from local_package import local_function
Python中的絕對導入vs相對導入
絕對導入涉及完整路徑,即,從項目的根文件夾復制到所需的模塊。絕對導入狀態(tài),即資源將使用其完整路徑從項目的根文件夾導入。
語法和實例:
讓我們看看下面的目錄結(jié)構(gòu):
這里有一個名為project的目錄,下面有兩個子目錄,即pkg1、pkg2。pkg1有兩個模塊,module1和module2。pkg2包含三個模塊,module3、module4、init.py,以及一個子包名subpkg1,其中包含module5.py。讓我們假設以下情況:
- pkg 1/module1.py包含一個函數(shù)fun 1
- pkg 2/module3.py包含一個函數(shù)fun 2
- pkg 2/subpkg 1/module5.py包含一個函數(shù)fun 3
# importing a fun1 from pkg1/module1 from pkg1.import module1 import fun1 from pkg1 import module2 # importing a fun2 from pkg2/module3 from pkg2 import module3 import fun2 # importing a fun3 from pkg2/subpkg1/module5 from pkg2.subpkg1.module5 import fun3
絕對導入的優(yōu)點和缺點
優(yōu)點:
絕對導入非常有用,因為它們是明確和直接的。
絕對導入很容易從導入的資源的位置準確地判斷出來,只需查看語句即可。
即使import語句的當前位置發(fā)生更改,絕對導入仍保持有效。
缺點:
如果目錄結(jié)構(gòu)非常大,則使用絕對導入沒有意義。在這種情況下,使用相對導入效果很好。
from pkg1.subpkg2.subpkg3.subpkg4.module5 import fun6
Python中的相對導入
相對導入指定從其當前位置導入的對象或模塊,該位置是import語句駐留的位置。有兩種類型的相對導入:
隱式相對導入-Python(3.x)中不允許隱式相對導入。
顯式相對導入-顯式相對導入已經(jīng)在Python(3.x)中獲得批準。
語法和實例:
相對導入的語法取決于當前位置以及要導入的模塊或?qū)ο蟮奈恢?。相對導入使用點(.)符號來指定位置。一個點表示模塊在當前目錄中,兩個點表示模塊在當前位置的父目錄中,三個點表示模塊在祖目錄中,依此類推。讓我們看看下面的目錄結(jié)構(gòu):
讓我們假設以下情況:
- pkg 1/module1.py包含一個函數(shù)fun 1
- pkg 2/module3.py包含一個函數(shù)fun 2
- pkg 2/subpkg 1/module5.py包含一個函數(shù)fun 3
# importing fun1 into pkg1/module1.py from .module1 import fun1 # importing fun2 and fun3 into pkg2/module3.py from .module3 import fun2 from .subpackage1.module5 import fun3
相對導入的優(yōu)點和缺點
優(yōu)點:
使用相對導入簡潔明了。
基于當前位置,它降低了import語句的復雜性。
缺點:
相對導入不像絕對導入那樣易讀。
使用相對導入并不容易,因為很難告訴模塊的位置。
以上就是淺析python中的絕對導入和相對導入的詳細內(nèi)容,更多關于python導入的資料請關注腳本之家其它相關文章!
相關文章
python中協(xié)程實現(xiàn)TCP連接的實例分析
在本篇文章中我們給大家分享了python中協(xié)程實現(xiàn)TCP連接的代碼示例內(nèi)容,有需要的朋友們可以跟著學習下。2018-10-10Python使用try except處理程序異常的三種常用方法分析
這篇文章主要介紹了Python使用try except處理程序異常的三種常用方法,結(jié)合實例形式分析了Python基于try except語句針對異常的捕獲、查看、回溯等相關操作技巧,需要的朋友可以參考下2018-09-09Python如何將圖像音視頻等資源文件隱藏在代碼中(小技巧)
有朋友問小編使用pyinstaller打包源碼時,因為代碼中使用了圖像、音頻、視頻等資源文件,無法將程序打包成單一的可執(zhí)行文件,怎么處理呢,下面小編通過代碼給大家介紹Python如何將圖像音視頻等資源文件隱藏在代碼中,感興趣的朋友一起看看吧2020-02-02