淺析python中的絕對(duì)導(dǎo)入和相對(duì)導(dǎo)入
在本文中,我們將看到Python中的絕對(duì)和相對(duì)導(dǎo)入。
Python中導(dǎo)入的工作
Python中的import類似于C/C++中的#include header_file。Python模塊可以通過(guò)使用import導(dǎo)入文件/函數(shù)來(lái)訪問(wèn)其他模塊的代碼。import語(yǔ)句是調(diào)用import機(jī)制的最常見方式,但它不是唯一的方式。
import語(yǔ)句涉及兩個(gè)操作,它搜索模塊,并將搜索結(jié)果綁定到本地作用域中的名稱。當(dāng)導(dǎo)入模塊時(shí),Python會(huì)運(yùn)行模塊文件中的所有代碼,并使其可用于導(dǎo)入器文件。當(dāng)一個(gè)模塊被導(dǎo)入時(shí),解釋器首先在sys.modules中搜索它,sys. modules是所有先前導(dǎo)入的模塊。如果沒(méi)有找到它,那么它將搜索所有具有該名稱的內(nèi)置模塊,如果找到它,那么解釋器將運(yùn)行所有代碼并使其對(duì)文件可用。如果找不到模塊,它將在變量sys. path給出的目錄列表中搜索同名文件。path是一個(gè)變量,包含一個(gè)路徑列表,其中包含python庫(kù)、包和包含輸入腳本的目錄。
例如,導(dǎo)入一個(gè)名為math的模塊,然后解釋器在內(nèi)置模塊中搜索它,如果沒(méi)有找到,則在sys. path給出的目錄列表中搜索名為math.py的文件。
import math print(math.pi)
import語(yǔ)句的語(yǔ)法
用戶可以導(dǎo)入包和模塊。注意導(dǎo)入一個(gè)包實(shí)際上是將包的__init__.py文件作為一個(gè)模塊導(dǎo)入。用戶還可以從包或模塊導(dǎo)入特定對(duì)象。通常有兩種類型的導(dǎo)入語(yǔ)法。當(dāng)您使用第一個(gè)時(shí),您直接導(dǎo)入資源。
import gxg
gxg可以是封裝或模塊。當(dāng)用戶使用第二種語(yǔ)法時(shí),則用戶從另一個(gè)包或模塊導(dǎo)入資源。
from gxg import geek
geek可以是模塊、子包或?qū)ο?,例如類或函?shù)。
導(dǎo)入語(yǔ)句的樣式
PEP 8是python的官方風(fēng)格指南,它有一套規(guī)則來(lái)指導(dǎo)如何制定python代碼以最大限度地提高其可讀性。對(duì)于編寫import語(yǔ)句,有以下幾點(diǎn):
1.導(dǎo)入應(yīng)該總是寫在文件的頂部,就在任何模塊注釋和文檔字符串之后。
2.導(dǎo)入通常應(yīng)該用空格分隔。
3.導(dǎo)入應(yīng)按以下順序分組。
標(biāo)準(zhǔn)庫(kù)導(dǎo)入(Python的內(nèi)置模塊)
相關(guān)第三方庫(kù)
本地應(yīng)用程序/庫(kù)特定導(dǎo)入
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中的絕對(duì)導(dǎo)入vs相對(duì)導(dǎo)入
絕對(duì)導(dǎo)入涉及完整路徑,即,從項(xiàng)目的根文件夾復(fù)制到所需的模塊。絕對(duì)導(dǎo)入狀態(tài),即資源將使用其完整路徑從項(xiàng)目的根文件夾導(dǎo)入。
語(yǔ)法和實(shí)例:
讓我們看看下面的目錄結(jié)構(gòu):
這里有一個(gè)名為project的目錄,下面有兩個(gè)子目錄,即pkg1、pkg2。pkg1有兩個(gè)模塊,module1和module2。pkg2包含三個(gè)模塊,module3、module4、init.py,以及一個(gè)子包名subpkg1,其中包含module5.py。讓我們假設(shè)以下情況:
- pkg 1/module1.py包含一個(gè)函數(shù)fun 1
- pkg 2/module3.py包含一個(gè)函數(shù)fun 2
- pkg 2/subpkg 1/module5.py包含一個(gè)函數(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
絕對(duì)導(dǎo)入的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn):
絕對(duì)導(dǎo)入非常有用,因?yàn)樗鼈兪敲鞔_和直接的。
絕對(duì)導(dǎo)入很容易從導(dǎo)入的資源的位置準(zhǔn)確地判斷出來(lái),只需查看語(yǔ)句即可。
即使import語(yǔ)句的當(dāng)前位置發(fā)生更改,絕對(duì)導(dǎo)入仍保持有效。
缺點(diǎn):
如果目錄結(jié)構(gòu)非常大,則使用絕對(duì)導(dǎo)入沒(méi)有意義。在這種情況下,使用相對(duì)導(dǎo)入效果很好。
from pkg1.subpkg2.subpkg3.subpkg4.module5 import fun6
Python中的相對(duì)導(dǎo)入
相對(duì)導(dǎo)入指定從其當(dāng)前位置導(dǎo)入的對(duì)象或模塊,該位置是import語(yǔ)句駐留的位置。有兩種類型的相對(duì)導(dǎo)入:
隱式相對(duì)導(dǎo)入-Python(3.x)中不允許隱式相對(duì)導(dǎo)入。
顯式相對(duì)導(dǎo)入-顯式相對(duì)導(dǎo)入已經(jīng)在Python(3.x)中獲得批準(zhǔn)。
語(yǔ)法和實(shí)例:
相對(duì)導(dǎo)入的語(yǔ)法取決于當(dāng)前位置以及要導(dǎo)入的模塊或?qū)ο蟮奈恢?。相?duì)導(dǎo)入使用點(diǎn)(.)符號(hào)來(lái)指定位置。一個(gè)點(diǎn)表示模塊在當(dāng)前目錄中,兩個(gè)點(diǎn)表示模塊在當(dāng)前位置的父目錄中,三個(gè)點(diǎn)表示模塊在祖目錄中,依此類推。讓我們看看下面的目錄結(jié)構(gòu):
讓我們假設(shè)以下情況:
- pkg 1/module1.py包含一個(gè)函數(shù)fun 1
- pkg 2/module3.py包含一個(gè)函數(shù)fun 2
- pkg 2/subpkg 1/module5.py包含一個(gè)函數(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
相對(duì)導(dǎo)入的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn):
使用相對(duì)導(dǎo)入簡(jiǎn)潔明了。
基于當(dāng)前位置,它降低了import語(yǔ)句的復(fù)雜性。
缺點(diǎn):
相對(duì)導(dǎo)入不像絕對(duì)導(dǎo)入那樣易讀。
使用相對(duì)導(dǎo)入并不容易,因?yàn)楹茈y告訴模塊的位置。
以上就是淺析python中的絕對(duì)導(dǎo)入和相對(duì)導(dǎo)入的詳細(xì)內(nèi)容,更多關(guān)于python導(dǎo)入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pandas計(jì)算相關(guān)系數(shù)corr返回空的問(wèn)題解決
本文主要介紹了pandas計(jì)算相關(guān)系數(shù)corr返回空的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01python中協(xié)程實(shí)現(xiàn)TCP連接的實(shí)例分析
在本篇文章中我們給大家分享了python中協(xié)程實(shí)現(xiàn)TCP連接的代碼示例內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2018-10-10Python使用try except處理程序異常的三種常用方法分析
這篇文章主要介紹了Python使用try except處理程序異常的三種常用方法,結(jié)合實(shí)例形式分析了Python基于try except語(yǔ)句針對(duì)異常的捕獲、查看、回溯等相關(guān)操作技巧,需要的朋友可以參考下2018-09-09在Python中使用__slots__方法的詳細(xì)教程
這篇文章主要介紹了在Python中使用__slots__方法的詳細(xì)教程,__slots__方法是Python的一個(gè)重要內(nèi)置類方法,代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04Python如何將圖像音視頻等資源文件隱藏在代碼中(小技巧)
有朋友問(wèn)小編使用pyinstaller打包源碼時(shí),因?yàn)榇a中使用了圖像、音頻、視頻等資源文件,無(wú)法將程序打包成單一的可執(zhí)行文件,怎么處理呢,下面小編通過(guò)代碼給大家介紹Python如何將圖像音視頻等資源文件隱藏在代碼中,感興趣的朋友一起看看吧2020-02-02Python Django請(qǐng)求和響應(yīng)對(duì)象詳解
這篇文章主要給大家介紹了關(guān)于django的請(qǐng)求和響應(yīng)對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11Python中關(guān)鍵字is與==的區(qū)別簡(jiǎn)述
這篇文章主要介紹了Python中關(guān)鍵字is與==的區(qū)別,對(duì)于Python初學(xué)者有一定的借鑒學(xué)習(xí)價(jià)值,需要的朋友可以參考下2014-07-07關(guān)于Python作用域自學(xué)總結(jié)
在本文里我們給大家整理了關(guān)于python自學(xué)作用域的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,需要的朋友們跟著學(xué)習(xí)下。2019-06-06Python編寫Windows Service服務(wù)程序
這篇文章主要為大家詳細(xì)介紹了Python編寫Windows Service服務(wù)程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01