#Python入門教程#
什麼是python中的模塊:
假設您正在使用python解釋器。您花了30分鐘來定義一個函數,然後使用它並退出解釋器。但是突然間,您記住仍然需要再次使用該功能。您再次輸入它,但該功能的定義已消失。哎呀,好痛。
現在,您再次需要花費30分鐘來鍵入相同的功能。因此,python有一種方法可以將該函數定義放入文件中並隨時使用。
模塊是ModuleType類型的對象。該模塊基本上是一個python文件(擴展名為的文件.py),其中包含定義和語句(例如:類,函數,變量等)。Python中的模塊為我們提供了邏輯上組織代碼的靈活性。我們使用模塊將大型程序分解為小的可管理文件。我們可以在模塊中定義函數或類,然後使用來在其他模塊中重用它們
import。Python本身帶有很多模塊,例如數學,迭代工具,集合等。
示例:讓我們創建一個模塊。在文件中鍵入以下函數,並將其另存為utils.py。
### utils.py def multiplication(a: int, b: int)-> int:"""This function will return the multiplication of two integers""" return a * b
因此,我們在名為utils的模塊中定義了一個名為乘法的函數。
如何導入模塊:
我們可以使用關鍵字將模塊內的定義導入另一個模塊import。
Python提供了兩種導入模塊的方法,如下所示:
import module_namefrom module_name import name1, name2...示例:讓我們將utils模塊導入另一個名為 operations.py
### operations.pyimport utilsresult = utils.multiplication(2, 4)print(result)>>> 8
當我們在操作模塊中導入utils時,它不會直接將utils模塊內部定義的對象加載到Operations模塊中。相反,它將僅在當前模塊名稱空間中加載模塊名稱(utils)。要使用utils定義的函數或類,我們必須使用上面示例()中所示的表示法。如果您嘗試直接使用乘法,則python會拋出如下所示的異常:
dot (.)
utils.multiplication(2, 4)
>>> import utils>>> multiplication(2,3)Traceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'multiplication' is not defined
如果要將特定功能或定義從模塊導入其他模塊,則必須使用
from module_name import name。
### operations.pyfrom utils import multiplicationresult = multiplication(2, 4)print(result)>>>8
如果大家在學習中遇到困難,想找一個python學習交流環境,可以加入我們的python裙,關注小編,並私信「01」即可進裙,領取python學習資料,會節約很多時間,減少很多遇到的難題。
注意:Python還允許我們使用as關鍵字為導入別名,如下所示:
import modulename as somenamefrom modulename import name as somename例:
### operations.py# import utils as ufrom utils import multiplication as mul# result = u.multiplication (2,4)result = mul(2, 4)print(result)>>>8
注意:我們可以使用import *或from .. import *導入特定模塊中的所有對象。
例:
### operations.pyfrom utils import *result = multiplication(2, 4)print(result)>>>8
注意:我們可以使用該dir()函數找出模塊內定義的對象。
>>> import utils>>>dir(utils)['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'multiplication']
在這裡,我們可以看到名稱列表(以及乘法)。所有以下劃線開頭的名稱都是與模塊關聯的默認Python屬性。例如,
__name__存儲模塊的名稱並__file__存儲其所在模塊的路徑。
>>>import utils>>>utils.__name__ # name of the module'utils'>>>utils.__file__ # module path'C:\\Users\\user\\Desktop\\python_practice\\utils.py'
python如何導入模塊:
Python使用了一個相對複雜的系統來查找和加載模塊。該
sys
模塊具有一些屬性,這些屬性定義Python將在哪裡尋找模塊。
Python在哪裡尋找進口?
>>> import sys>>> sys.path['', 'C:\\Users\\user\\Anaconda3\\python37.zip', 'C:\\Users\\user\\Anaconda3\\DLLs', 'C:\\Users\\user\\Anaconda3\\lib', 'C:\\Users\\user\\Anaconda3', 'C:\\Users\\user\\AppData\\Roaming\\Python\\Python37\\site-packages', 'C:\\Users\\user\\Anaconda3\\lib\\site-packages', 'C:\\Users\\user\\Anaconda3\\lib\\site-packages\\win32', 'C:\\Users\\user\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Users\\user\\Anaconda3\\lib\\site-packages\\Pythonwin']
因此,當我們導入模塊時,python會查看
sys.path
列表。如果在這些路徑之一中未找到該模塊,則它將引發一個
ModuleNotFoundError
。
有多種方法可以確保在運行Python時目錄始終位於Python sys.path列表中,包括:
sys.path.append('module/package directory')導入前使用。將目錄放入PYTHONPATH環境變量的內容中。使模塊可安裝並安裝。概括地說,這就是Python導入模塊的方式:
導入搜索期間檢查的第一個地方是sys.modules。它檢查sys.modules緩存以查看模塊是否已經導入-如果是,則僅在其中使用引用,否則:它創建一個新的模塊對象(types.ModuleType)它從文件加載原始碼它將添加一個條目sys.modules,名稱為鍵,新創建的對象引用為值。它編譯並執行原始碼。注意:導入模塊時,將執行模塊代碼。
導入模塊時會發生什麼
導入模塊名如果整個模塊(模塊名)尚不存在,則將其加載到內存中sys.modules使用module_name的鍵添加對它的引用在我們當前的名稱空間中添加一個引用了module_name對象的相同名稱的符號從module_name導入somename如果整個模塊(module_name)還不存在,則將其加載到內存中sys.modules使用module_name的鍵添加對它的引用將符號somename添加到引用module_name.somename函數的當前名稱空間中它不會將符號module_name添加到我們當前的名稱空間中導入module_name作為randomename如果整個模塊(module_name)還不存在,則將其加載到內存中sys.modules使用module_name的鍵添加對它的引用將符號randomename添加到引用module_name對象的當前名稱空間中從module_name導入somename作為randomname如果整個模塊(module_name)尚不存在,則將其加載到內存中sys.modules使用module_name的鍵添加對它的引用將符號randomname添加到引用module_name.somename函數的當前名稱空間中它不會將符號module_name添加到我們當前的名稱空間中從module_name導入*如果整個模塊(module_name)尚不存在,則將其加載到內存中sys.modules使用module_name的鍵添加對它的引用將module_name模塊中所有導出符號的符號直接添加到我們的名稱空間(我們可以使用來控制導入的內容__all__)它不會將符號module_name添加到我們當前的名稱空間中最後多說一句,小編是一名python開發工程師,這裡有我自己整理的整套python學習資料和路線,想要這些資料的都可以關注小編,並私信「01」領取。