建立乙個資料夾
或者檔案
。
├── run.py
├── calculate
│ ├── add.py
│ ├── divde.py
│ ├── multi.py
│ └── sub.py
呼叫模組。
# filename:add.py
defadd
( a, b)
:return a+ b
# filename:run.py
from calculate import add
print
( add.add(1,
2))
import calculate.add
print
(dir
( add)
)""" output
traceback (most recent call last):
file "./run.py", line 7, in print( dir( add))
nameerror: name 'add' is not defined
"""
新增空add
方法出錯了?使用dir()
檢視,似乎calculate
包並沒有add
方法,這是怎麼回事?
沒有加 __init__.py 檔案!
如果乙個包沒有
__init__.py
檔案,就會被看成乙個普通的資料夾,雖說普通資料夾也能夠import
,但是並不能實現什麼功能。
__init__.py
# filename: run.py
import calculate
print
(dir
( calculate )
)"""
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
"""
為什麼還是提示沒有add
方法?明明已經有__init__.py
檔案了?
經查閱資料,所以在__init__.py
控制著包的匯入行為,假如__init__.py
為空,那麼僅僅匯入包是什麼都做不了的,也不能訪問包下面的模組;只有當在
__init__.py
將模組逐一import
,匯入包後才能有效地使用包中的模組。當然,沒有在
__init__.py
中 import 模組的包,還是可以通過 from 包 import 模組的方式匯入模組。
__init__.py
為空的時候,還是可以通過(也只能通過)以下方法使用各個模組。
# filename: run.py
from calculate import add
print
( add.add(1,
2))
要注意:包、模組、方法是三個級別的東西,譬如上面的 calculate 是包,import 匯入的是 add 模組,模組 add 中的 add 是函式方法。等級一定要清晰明了,不然會出錯。
當然,也可以直接匯入模組裡面的函式方法,這樣使用過程中就不用冗長的字首了。
一般來說,匯入包中所有的模組可以使用 from 包 import *,但是看上面一段**,似乎並沒能匯入全部模組之後,而單獨匯入某乙個模組是成功的。這是為什麼?最終還是要歸結於__init__.py
的內容。
給__init__.py
新增內容
將所有的模組名稱以列表的形式賦值給__all__屬性,就可以匯入所有模組。
# filename:__init__.py
# 注意,一定要寫包的名稱 calculate.作為字首,不然會找不到模組!
from calculate import
( add,
sub,
multi,
divde
)__all__ =
['add'
,'sub'
,'multi'
,'divde'
]# filename: run.py
import calculate
print
(dir
( calculate )
)"""
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'add', 'divde', 'multi', 'sub']
"""
總之,匯入時,package 內的 module 是受__init__.py
限制的。 使用IDLE編寫Python
idle python gui 是乙個功能完備的 ide,允許你再這個ide中編寫 另外還有乙個python shell python的互動模式 可以在其上面進行程式設計練習 idle提供了大量的特性 1.tab鍵自動補全 先輸入前面幾個字母,然後按下tab鍵,idle會自動匹配 2.回退 語句 組...
python呼叫包 Python的包引用與環境變數
1 檔案 包的引用規則,要從工程的根目錄開始查詢,這樣的使用相對路徑的方式比較簡單,並且容易理解。比如我們建立如下的目錄結構 目錄結構.png image.png 此時我們要在c 檔案中,引用a檔案中的內容,那麼在c檔案中,就可以這麼寫 from dir a import a print a.a 同...
python 包 模組的概念 匯入與使用
how to define 模組 how to 使用模組 模組直接匯入 import module name module name.function.name module name.class name 若模組名稱直接以數字開頭,需要借助importlibimport importlib 匯入了...