本文目錄一覽:
- 1、python使用from能導入模版,使用import不能導入模版
- 2、python導入模塊的方法有哪些
- 3、Python 中的import 機制
- 4、如何在python3中正確導入同一目錄下的模塊
- 5、python使用相對導入的具體意義?
- 6、python如何導入函數
python使用from能導入模版,使用import不能導入模版
其實也可以把文件夾定義為包,在當前文件夾放一個 __init__.py 的空文件
這樣就可以絕對導入 import module_name.import1
或是相對導入 import .import1
python導入模塊的方法有哪些
方法一
import modname
模塊是指一個可以交互使用,或者從另一Python 程序訪問的代碼段。只要導入了一個模塊,就可以引用它的任何公共的函數、類或屬性。模塊可以通過這種方法來使用其它模塊的功能。
用import語句導入模塊,就在當前的名稱空間(namespace)建立了一個到該模塊的引用.這種引用必須使用全稱,也就是說,當使用在被導入模塊中定義的函數時,必須包含模塊的名字。所以不能只使用 funcname,而應該使用 modname.funcname
方法二
from modname import funcname
from modname import fa, fb, fc
或者
from modname import *
與第1種方法的區別:funcname 被直接導入到本地名字空間去了,所以它可以直接使用,而不需要加上模塊名的限定* 表示,該模塊的所有公共對象(public objects)都被導入到 當前的名稱空間,也就是任何只要不是以」_」開始的東西都會被導入。
modname沒有被定義,所以modname.funcname這種方式不起作用。並且,如果funcname如果已經被定義,它會被新版本(該導入模塊中的版本)所替代。如果funcname被改成指向其他對象,modname不能不會覺察到。
建議:
1)如果你要經常訪問模塊的屬性和方法,且不想一遍又一遍地敲入模塊名,使用 from module import
2)如果你想要有選擇地導入某些屬性和方法,而不想要其它的,使用 from module import
3)如果模塊包含的屬性和方法與你的某個模塊同名,你必須使用import module來避免名字衝突
4)盡量少用 from module import * ,因為判定一個特殊的函數或屬性是從哪來的有些困難,並且會造成調試和重構都更困難。
方法三
內建函數__import__()
除了前面兩種使用import關鍵字的方法以外,我們還可以使用內建函數 __import__() 來導入 module。兩者的區別是,import 後面跟的必須是一個類型(type),而__import__() 的參數是一個字元串,這個字元串可能來自配置文件,也可能是某個表達式計算結果。例如:
mymodule = __import__ (』module_name』)
附註:
1)模塊的內容都放在一個模塊文件中,如 mymodule 的內容應該放在PYTHONPATH 目錄下的一個mymodule.py中,C實現的除外
2)包可以將幾個模塊名稱空間組織起來, 如A.b 就表示在包A中的一個子模塊b
可以單獨導入某一個子模塊,如Python文檔中給出的例子
import sound.effects.echo
這樣必須使用全稱對裡面的對象進行引用,如
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
還可以使用下面的語句來載入echo子模塊
from Sound.Effects import echo
它在沒有包前綴的情況下也可以使用, 所以它可以如下方式調用:
echo.echofilter(input, output, delay=0.7, atten=4)
不主張從一個包或模塊中用import * 導入所有模塊,因為這樣的通常會導致可讀性很差。
from Package import specific_submodule的用法並沒有錯,實際上這還是推薦的用法,除非導入的模塊需要使用其它包中的同名子模塊(the importing module needs to use submodules with the same name from different packages).
綜上所述,一般情況應該使用import , 但有幾個例外
1)module文檔告訴你要用from-import的
2)導入一個包組件。需要一個包裡面的某個子模塊,一般用from A.b import c比import A.b.c 更方便 且不會冒混淆的危險.
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的模塊引用和查找路徑
如何在python3中正確導入同一目錄下的模塊
因為要absolute_import,這樣import webchat_sdk.basic應該沒問題了。
在 Python 2 裡面可以使用 import foo來導入相同目錄包下的模塊foo,在 Python 3 裡面就是導入的項目根目錄(最上層有__init__.py的目錄)包foo。 也就是說 Python 3 默認就是絕對導入的,import .foo只是相對於絕對導入來說的,並不是相對導入。
python使用相對導入的具體意義?
除了讓包內導入更加顯式,這個功能的一部分設計初衷是,為了幫助腳本解決同名文件出現在模塊搜索路徑上多個不同位置時的二義性。考慮包目錄,這定義了一個名為mypkg 的包,其中含有名為mypkg.main和mypkg.string 的模塊。現在,假設模塊main試圖導入名為string的模塊。在 Python 2.X和更早版本中,Python會先尋找mypkg目錄以執行相對導入。這會找到並導入位於該處的string.py文件,將其賦值給mypkg.main模塊命名空間內的名稱string。
不過,這一導入的本意可能是要導入Python標準庫的string模塊。可惜的是,在這些Python版本中,無法直接忽略mypkg.string 去尋找位於模塊搜索路徑更右側的標準庫中的string模塊。此外,我們無法使用完整包導入路徑來解決這個問題,因為我們無法依賴在每台機器上的標準鏈接庫路徑。換句話說,包中的簡單導入可能具有二義性而且容易出錯。在包內,我們無法確定imports pam語句指的是包內的模塊還是包外的模塊。一種可能的後果是,一個局部的模塊或包會在不經意間隱藏了sys.path 上的另一個模塊。
在實踐中,Python使用者可以避免為他們自己的模塊重複使用標準庫模塊的名稱(如果需要標準string庫,就不要把新的模塊命名為string)。但是,一個包還是有可能意外地隱藏標準庫模塊。再者,Python 以後可能新增標準庫模塊,而其名稱可能剛好就和自己的一個模塊同名。而依賴於沒有點號開頭相對導入的程序代碼同樣也不容易理解,因為讀者可能對希望使用哪個模塊而感到困惑。所以我們最好能在代碼中顯式地指出導入的解析過程。
python如何導入函數
python的內建函數即是python自帶的函數,這種函數不需要定義,並且不同的內建函數具有不同的功能,可以直接使用。
以下是部分內建函數用法及說明
1、abs(),返回數字的絕對值。
2、all(),如果集合中所有元素是true或集合為空集合,返回True。
3、any(),如果集合中有一項元素是true,返回True;空集合為False
4、ascii(), 返回一個表示對象的字元串。
5、bin(),將整數轉換為前綴為「0b」的二進位字元串。
6、bool(),返回一個布爾值,即True或者之一False。
7、bytearray(),返回一個新的位元組數組。
8、callable(對象)判斷對象參數是否可被調用(可被調用指的是對象能否使用()括弧的方法調用)
9、chr(),返回表示Unicode代碼點為整數i的字元的字元串。與ord()函數相反。
推薦學習《python教程》
10、classmethod,將方法轉換為類方法。
11、compile,將源代碼編譯為代碼或AST對象。代碼對象可以由exec()或執行eval()。 source可以是普通字元串,位元組字元串或AST對象。
12、dic(),創建一個字典
13、divmod(a,b),將兩個數作為參數,並在使用整數除法時返回由商和餘數組成的一對數
14、enumerate(iterable,start = 0)
enumerate是枚舉、列舉的意思
對於一個可迭代的(iterable)/可遍歷的對象(如列表、字元串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
enumerate多用於在for循環中得到計數
15、eval,將一個字元串變為字典
16、exec(object [, globals[, locals]])exec語句用來執行儲存在字元串或文件中的Python語句
17、filter(功能,可迭代)
filter函數用於過濾序列
filter()把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/293251.html