本文目錄一覽:
- 1、from…import、import……as與from…import* 的含義與區別
- 2、在Python 中如何使用 import 來調用其他模塊?模塊放置的路徑是…
- 3、python import路徑是什麼?
- 4、Python 中的import 機制
from…import、import……as與from…import* 的含義與區別
一、import…as
import:導入一個模塊;註:相當於導入的是一個文件夾,是個相對路徑
import A as B:給予工具庫 A 一個簡單的別稱 B ,可以幫助記憶。例:import torch.nn as nn;import torch as t
二、from…import
from…import:導入了一個模塊中的一個函數;註:相當於導入的是一個文件夾中的文件,是個絕對路徑。
例:如 from A import b,相當於
1 import A
2 b = A.b
三、結論
當引用文件時:
import //模塊.函數,導入模塊,每次使用模塊中的函數都要是定是哪個模塊。
from…import // 直接使用函數名使用就可以了
from…import* // 是把一個模塊中所有函數都導入進來; 註:相當於:相當於導入的是一個文件夾中所有文件,所有函數都是絕對路徑。
————————————————
原文鏈接:
在Python 中如何使用 import 來調用其他模塊?模塊放置的路徑是…
Python
會自動從
sys.path
路徑列表裡的所有路徑里尋找你要
import
的模塊,這個路徑列表可以通過在終端里輸入以下命令查看:
import
sys
sys.path
如果要調用其他路徑的文件,可以先在上述列表中加入新的路徑,以你提到的情況為例:
import
sys
sys.path.insert(0,
‘/’)
import
test
一般一個項目的所有文件應該在同一個項目文件夾中吧,此時有其他解決辦法比如在項目的下級目錄里放置
__init__.py
文件,然後用
from
文件夾
import
文件名
的方式來引入模塊。其實我是菜鳥,等高手修正。
python import路徑是什麼?
以下為純手打,下面給幾個demos:
說明:
modules所在的目錄在python里叫package, 下面是一個名為 IsDir的package(實際上就是一個目錄), package下面有4個modules(A, B, C, D)和一個__init__.py文件,目錄結構如下:
IsDir/A.py B.py C.py D.py __init__.py大體來講,有兩種方法可以調用某目錄下(包括遞歸目錄)的modules.
一. __init__.py為空時
1.1 以下為調用moduleA的代碼:
#!/usr/bin/env pythonfrom IsDir import AA.say()輸出:
This is module A!1.2 如果想調用moduleA,B,C,D呢?
方法1.
#!/usr/bin/env pythonfrom IsDir import Afrom IsDir import Bfrom IsDir import Cfrom IsDir import DA.say()B.say()C.say()D.say()方法2.
#!/usr/bin/env pythonimport IsDir.Aimport IsDir.Bimport IsDir.Cimport IsDir.Dfrom IsDir import *A.say()B.say()C.say()D.say()錯誤示例1:
#!/usr/bin/env pythonimport IsDir.AA.say()錯誤示例2:
#!/usr/bin/env pythonfrom IsDir import *A.say()錯誤的原因:
IsDir/目錄下__init__.py 為空時,直接import IsDir.A 或者from IsDir import *是無效的.
從官方文檔里可以看到,__init__.py 里沒有__all__ = [module1,module2,…]時,
from IsDir import * 只能保證IsDir被imported, 所以此時IsDir里的modules是無法被imported,此時只有如我上面所寫的代碼所示才能正確執行,否則是錯誤的。官方解釋為:import IsDir.A並無任何意義,只有接著執行from IsDir import *後,import IsDir.A語句里的module A才會被定義,所以完整的調用因改為: 1. import IsDir.A 2. from IsDir import *。二. __init__.py用all=[…]指定該package下可以被imported進去的module
__init__.py里寫入如下內容:
% cat IsDir/__init__.py__all__ = [“A”,”B”]然後使用之:
#!/usr/bin/env pythonfrom IsDir import *A.say()B.say()結果:
% python test.py This is module A!This is module B!錯誤實例:
#!/usr/bin/env pythonfrom IsDir import *C.say()以上示例之所以錯誤,是因為C並沒有在__all__ = [“A”,”B”]里制定,由此可見,package IsDir下面的__init__.py里,__all__=[…]具有隔離modules的作用。
補充:
module A, B, C,D里我分別只定義了一個method, 例如,以下為module A的code:
% cat IsDir/A.pydef say(): print “This is module A!”後記:
謝謝這位同學,回答你的問題感覺很有收穫,順便又把python溫習了一遍。回頭把這些總結貼到我的blog上以上為手寫,望採納,共勉。
=============================================================
老子寫了這麼多居然採用了另一個簡陋的答案,mlgb的,枉我熬夜給你答題。這種白痴樓主就不配在這裡問問題。
Python 中的import 機制
解釋器 在執行語句時,遵循作用域原則。因為這和作用域有關係, 如果在頂層導入模塊,此時它的作用域是全局的;如果在函數內部導入了模塊,那它的作用域只是局部的 ,不能被其它函數使用。如果其它函數也要用到這個模塊,還需要再次導入比較麻煩。
在用import語句導入模塊時最好按照這樣的順序:
絕對路徑 就是文件的真正存在的路徑,是指從硬碟的根目錄(盤符)開始,進行一級級目錄指向文件。
相對路徑 就是以當前文件為基準進行一級級目錄指向被引用的資源文件。
以下是常用的表示當前目錄和當前目錄的父級目錄的標識符
形如from moduleB import ClassB語句,根據Python內部import機制,執行細分步驟:
總結:from moduleB import ClassB有兩個過程,先from module,後import ClassB。
當然將moduleA.py語句 from moduleB import ClassB改為:import moduleB,將在第二次執行moduleB.py語句from moduleA import ClassA時報錯:ImportError: cannot import name 『classA』
在一個文件下同時有 init .py文件、和其他模塊文件時,該文件夾即看作一個包(package)。包的導入 和模塊導入基本一致,只是導入包時,會執行這個 init .py,而不是模塊中的語句。
而且,如果只是單純地導入包【形如:import xxx】,而包的 init .py中有沒有明確地的其他初始化操作,則:此包下的模塊 是不會被自動導入的。當然該包是會成功導入的,並將包名稱放入當前.py的Local命名空間中。
參考文章:
Python中import機制
Python 3.x可能是史上最詳解的【導入(import)】
在Python中以絕對路徑或者相對路徑導入文件的方法
Python的模塊引用和查找路徑
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/157805.html