Python 包的編寫與使用

2021-09-28 23:38:41 字數 2729 閱讀 5288

建立乙個資料夾或者檔案

├── 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 匯入了...