python指定導(dǎo)入目錄路徑,稱(chēng)為包導(dǎo)入。
通過(guò)import和from導(dǎo)入包模塊。
通過(guò)all指定導(dǎo)入的模塊和導(dǎo)入的模塊屬性。
1.1 python包import和from
用法
import dir1.dir2.mod
from dir1.dir2 import mod
from dir1.dir2.mod import x
描述
| NO | 內(nèi)容 | 描述 |
|---|---|---|
| 1 | 點(diǎn)號(hào)分隔 | 包導(dǎo)入的路徑以點(diǎn)號(hào)分隔,點(diǎn)號(hào)對(duì)應(yīng)機(jī)器路徑分隔符。 |
| 2 | 目錄關(guān)系 | 包名對(duì)應(yīng)機(jī)器目錄,左邊為父目錄,右邊為子目錄。 |
| 3 | 搜索路徑 | dir1所在父目錄必須在模塊搜索路徑中。 |
| 4 | init .py | 包導(dǎo)入的路徑(目錄)必須存在 init .py,才能導(dǎo)入成功。 init .py內(nèi)容可以為空和非空。 |
| 5 | 包初始化 | 首次導(dǎo)入包時(shí),自動(dòng)執(zhí)行 init .py文件內(nèi)容。 |
| 6 | 模塊初始 | import dir1.dir2.mod返回模塊對(duì)象,包含 init .py的全部變量。 |
| 7 | import | import dir1.dir2.mod后,每次使用都需要寫(xiě)全路徑:dir1.dir2.mod.x,如果路徑有變更,每處使用的地方都要修改。 |
| 8 | from | from dir1.dir2 import mod,使用不需寫(xiě)全路徑:mod.x,如果路徑有變更,只需修改from一處。 |
| 9 | as | 通過(guò)as給import包取別名,簡(jiǎn)化書(shū)寫(xiě)。 |
示例
# dir1\\__init__.py
print('在dir1\\__init__.py')
a = 1
# dir1\\dir2\\__init__.py
print('在dir1\\dir2\\__init__.py')
b = 2
# dir1\\dir2\\mod.py
print('在dir1\\dir2\\mod.py')
s = '梯閱線條'
# 在 idle 執(zhí)行下面示例
>>> import os
>>> path=r'E:\\documents\\F盤(pán)'
>>> os.chdir(path)
# 首次導(dǎo)入自動(dòng)執(zhí)行__init__.py
>>> import dir1.dir2.mod
在dir1\\__init__.py
在dir1\\dir2\\__init__.py
在dir1\\dir2\\mod.py
>>> dir1.dir2.mod.s
'梯閱線條'
# 再次導(dǎo)入不再執(zhí)行__init__.py
>>> import dir1.dir2.mod
# 修改py文件
# dir1\\__init__.py
print('修改在dir1\\__init__.py')
a = 1
# dir1\\dir2\\__init__.py
print('修改在dir1\\dir2\\__init__.py')
b = 2
# dir1\\dir2\\mod.py
print('修改在dir1\\dir2\\mod.py')
s = '修改梯閱線條'
# 在 idle 執(zhí)行下面示例
# 直接import不會(huì)執(zhí)行修改后代碼
>>> import dir1.dir2.mod
>>> dir1.dir2.mod.s
'梯閱線條'
# reload 模塊或包重新執(zhí)行對(duì)應(yīng)__init__.py最新代碼
>>> reload(dir1.dir2.mod)
修改在dir1\\dir2\\mod.py
>>> dir1.dir2.mod.s
'修改梯閱線條'
'dir1.dir2.mod' from 'E:\\\\documents\\\\F盤(pán)\\\\dir1\\\\dir2\\\\mod.py'>
>>> reload(dir1.dir2)
修改在dir1\\dir2\\__init__.py
'dir1.dir2' from 'E:\\\\documents\\\\F盤(pán)\\\\dir1\\\\dir2\\\\__init__.py'>
>>> reload(dir1)
修改在dir1\\__init__.py
'dir1' from 'E:\\\\documents\\\\F盤(pán)\\\\dir1\\\\__init__.py'>
# 模塊對(duì)象 包含__init__.py 全部頂層變量
>>> dir1.a
1
>>> dir1.dir2.b
2
# import 需要寫(xiě)全路徑,否則找不到模塊對(duì)象
>>> dir2.mod.s
Traceback (most recent call last):
File "" , line 1, in
dir2.mod.s
NameError: name 'dir2' is not defined
# from 不需寫(xiě)全路徑,只需寫(xiě)import后面變量即可
>>> from dir1.dir2 import mod
>>> mod.s
'修改梯閱線條'
# as 給包路徑取別名,通過(guò)別名訪問(wèn)模塊對(duì)象屬性
>>> import dir1.dir2.mod as md
>>> md.s
'修改梯閱線條'
1.2 python模塊all列表
用法
# moda.py
__all__ =['v1','myprint',]
描述
python用from module import *導(dǎo)入模塊屬性時(shí):
| NO | 描述 |
|---|---|
| 1 | 模塊已定義all列表,則只導(dǎo)入all列表內(nèi)的屬性、方法、類(lèi) |
| 2 | 模塊未定義all列表,則導(dǎo)入模塊的全部頂層屬性 |
| 3 | all寫(xiě)在import語(yǔ)句下面 |
示例
# E:\\documents\\F盤(pán)\\moda.py
import sys
__all__ =['v1','myprint',]
print('模塊__all__')
v1 = '梯閱線條'
v2 = 'tyxt.work'
def myprint():
print(v2)
def myecho():
print(v1)
# 在 idle 執(zhí)行下面示例
>>> import os
>>> path=r'E:\\documents\\F盤(pán)'
>>> os.chdir(path)
>>> from moda import *
模塊__all__
# 可以訪問(wèn) __all__ 列表屬性
>>> v1
'梯閱線條'
# 不可訪問(wèn) __all__ 列表外屬性
>>> v2
Traceback (most recent call last):
File "" , line 1, in
v2
NameError: name 'v2' is not defined
>>> myprint()
tyxt.work
>>> myecho()
Traceback (most recent call last):
File "" , line 1, in
myecho()
NameError: name 'myecho' is not defined
1.3 python包all列表
用法
# __init__.py
__all__ = ['dir1moda',]
描述
python用from dir1 import * 導(dǎo)入包模塊時(shí):
| NO | 描述 |
|---|---|
| 1 | init .py已定義all列表,則只導(dǎo)入all列表內(nèi)的模塊。 |
| 2 | init .py未定義all列表,則不會(huì)自動(dòng)導(dǎo)入任何模塊,只導(dǎo)入包,可以在 init .py手動(dòng)導(dǎo)入模塊。 |
| 3 | all寫(xiě)在import語(yǔ)句下面 |
示例
# 目錄結(jié)構(gòu):
# --dir1
# ----__init__.py
# ----dir1moda.py
# ----dir1modb.py
# E:\\documents\\F盤(pán)\\dir1\\dir1moda.py
print('在E:\\documents\\F盤(pán)\\dir1\\dir1moda.py')
# E:\\documents\\F盤(pán)\\dir1\\dir1modb.py
print('在E:\\documents\\F盤(pán)\\dir1\\dir1modb.py')
# E:\\documents\\F盤(pán)\\dir1\\__init__.py
import sys
__all__ = ['dir1moda',]
print('修改在dir1\\__init__.py')
a = 1
# 在 idle 執(zhí)行下面示例
>>> import os
>>> path=r'E:\\documents\\F盤(pán)'
>>> os.chdir(path)
>>> from dir1 import *
修改在dir1\\__init__.py
在E:\\documents\\F盤(pán)\\dir1\\dir1moda.py
# 在 __all__ 列表內(nèi)的模塊被自動(dòng)導(dǎo)入,可訪問(wèn)
>>> dir1moda.s
'在E:\\\\documents\\\\F盤(pán)\\\\dir1\\\\dir1moda.py'
# 非 __all__ 列表內(nèi)的模塊不自動(dòng)導(dǎo)入,不可訪問(wèn)
>>> dir1modb.s
Traceback (most recent call last):
File "" , line 1, in
dir1modb.s
NameError: name 'dir1modb' is not defined
# 修改__init__.py文件:E:\\documents\\F盤(pán)\\dir1\\__init__.py,刪除__all__
import sys
print('修改在dir1\\__init__.py')
a = 1
# 重啟 idle 執(zhí)行下面示例
>>> import os
>>> path=r'E:\\documents\\F盤(pán)'
>>> os.chdir(path)
>>> from dir1 import *
修改在dir1\\__init__.py
# 未定義__all__ ,不自動(dòng)導(dǎo)入任何模塊,不可訪問(wèn)
>>> dir1moda.s
Traceback (most recent call last):
File "" , line 1, in
dir1moda.s
NameError: name 'dir1moda' is not defined
>>> dir1modb.s
Traceback (most recent call last):
File "" , line 1, in
dir1modb.s
NameError: name 'dir1modb' is not defined
# 修改__init__.py文件:手動(dòng)導(dǎo)入模塊
import sys
from dir1 import dir1moda
print('修改在dir1\\__init__.py')
a = 1
# 重啟 idle 執(zhí)行下面示例
>>> import os
>>> path=r'E:\\documents\\F盤(pán)'
>>> os.chdir(path)
>>> from dir1 import *
在E:\\documents\\F盤(pán)\\dir1\\dir1moda.py
修改在dir1\\__init__.py
# __init__.py 手動(dòng)導(dǎo)入模塊,可訪問(wèn)
>>> dir1moda.s
'在E:\\\\documents\\\\F盤(pán)\\\\dir1\\\\dir1moda.py'
>>> dir1modb.s
Traceback (most recent call last):
File "" , line 1, in
dir1modb.s
NameError: name 'dir1modb' is not defined
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90016 -
import
+關(guān)注
關(guān)注
0文章
15瀏覽量
2198
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
什么是python包、模塊和庫(kù)?
使用 模塊名.變量名 的方式訪問(wèn)這個(gè)變量。>>> import demo導(dǎo)入成功>>> demo.name'Python編程時(shí)光'在導(dǎo)入模塊的時(shí)候,有一個(gè)非常重要
發(fā)表于 03-09 16:48
python花式導(dǎo)包的八種方法
。$ python3 -m pip install import_from_github_com這個(gè)包使用了PEP 302中新的引入鉤子,允許你可以從github上引入包。這個(gè)
發(fā)表于 03-10 16:51
python 包導(dǎo)入的三個(gè)冷門(mén)知識(shí)點(diǎn)
1. 使用 __all__ 控制可被導(dǎo)入的變量使用 from module import * 默認(rèn)情況下會(huì)導(dǎo)入 module 里的所有變量,若你只想從模塊中導(dǎo)入其中幾個(gè)變量,可以在 m
發(fā)表于 03-14 16:33
python包、模塊和庫(kù)是什么
有一個(gè)名為 demo.py 的文件,文件內(nèi)容如下 name="Python編程時(shí)光"print("導(dǎo)入成功") 直接使用 import 語(yǔ)句就可以導(dǎo)入,導(dǎo)入之后,就可以使用 模塊名.變量名 的方式訪問(wèn)
python花式導(dǎo)包的八種方法
python花式導(dǎo)包的八種方法 1. 直接 import 人盡皆知的方法,直接導(dǎo)入即可 import os os.getcwd()'/home/xxx' 與此類(lèi)似的還有,不再細(xì)講
詳解python常規(guī)包與命名空間包
python常規(guī)包與命名空間包 1. 常規(guī)包 在 Python 3.3 之前或者說(shuō) Python
python包模塊相對(duì)導(dǎo)入from和import介紹1
無(wú)包文件**init**.py下,python通過(guò)import module導(dǎo)入模塊時(shí),先搜索程序運(yùn)行主目錄。
程序運(yùn)行主目錄為運(yùn)行的py文件所在目錄,而不是執(zhí)行
python包模塊相對(duì)導(dǎo)入from和import介紹2
python2.7先搜索當(dāng)前包目錄,再搜索sys.path模塊搜索路徑。即先相對(duì)再絕對(duì)。
本示例在交互模式執(zhí)行,非文件模式執(zhí)行。
淺析python模塊創(chuàng)建和from及import使用
python模塊通過(guò)用python程序編寫(xiě)的.py文件即可創(chuàng)建,通過(guò)from及import語(yǔ)句導(dǎo)入模塊
import模塊的導(dǎo)入方法
字 import 加載的模塊分為四種類(lèi)型: 使用python編寫(xiě)的代碼 .py 文件 已被編譯為共享庫(kù)或 DLL 的C或C++擴(kuò)展 一組模塊的包
rom…import導(dǎo)入代碼介紹
rom…import導(dǎo)入 基本語(yǔ)法格式如下: from 模塊名 import 成員1,成員2,… 如果希望導(dǎo)入一個(gè)模塊中的所有成員,則可以采
Python導(dǎo)入包操作和本質(zhì)
導(dǎo)入包操作和本質(zhì) 常見(jiàn)方式如下: import a.aa.module_AA : 按模塊路徑導(dǎo)入 在使用時(shí),必須加完整名稱(chēng)來(lái)引用. 比如: a.aa.module_AA.fun_AA() fr
Python import Hook 實(shí)現(xiàn)遠(yuǎn)程導(dǎo)入模塊
所謂的模塊 導(dǎo)入,是指在一個(gè)模塊中使用另一個(gè)模塊的代碼的操作,它有利于代碼的復(fù)用。 也許你看到這個(gè)標(biāo)題,會(huì)說(shuō)我怎么會(huì)發(fā)這么基礎(chǔ)的文章? 與此相反。恰恰我覺(jué)得這篇文章的內(nèi)容可以算是 Python
python如何import自己的模塊
在Python中,我們可以通過(guò)import語(yǔ)句來(lái)引入自己的模塊。導(dǎo)入自己的模塊可以提高代碼的可重用性,使代碼更加清晰和易于維護(hù)。在本文章中,我們將詳細(xì)介紹如何導(dǎo)入自己的
如何用import導(dǎo)入一個(gè)包
在Python中,import語(yǔ)句用于導(dǎo)入代碼所需的模塊或包。模塊是Python代碼的集合,而
簡(jiǎn)述python包模塊import和from及all
評(píng)論