- 網絡自動化運維教程
- 梁廣民 王金周等主編
- 1415字
- 2024-06-19 17:07:47
1.3.3 網絡模塊
Python提供了強大的模塊支持,不僅有大量的標準模塊,還有大量的第三方模塊。開發者也可以開發自定義模塊。這些強大的模塊可以極大地提高開發者的開發效率。
模塊就是Python程序,任何Python程序都可以作為模塊。隨著程序功能的復雜化,程序不斷變大。為了便于維護,通常會將其分為多個文件(模塊),這樣不僅可以提高代碼的可維護性,還可以提高代碼的可重用性。當編寫好一個模塊后,若編程過程中需要用到該模塊的某個功能(由變量、函數、類實現),則無須做重復性的編寫工作,直接在程序中導入該模塊即可。
(1)導入模塊
Python中有幾種方法可以導入模塊。
●導入整個模塊:import模塊名,如導入sys模塊,import sys。
●導入整個模塊,并指定別名:import模塊名as別名。

●導入模塊中的某個或某些函數:from模塊名import函數名。

●導入指定模塊中的所有成員:from模塊名import*。
(2)自定義模塊
下面是創建自己的模塊并將函數從一個模塊導入另一個模塊的例子。
首先,創建名為check_ip_func.py的文件,其功能是根據參數檢查IP地址的正確性,返回IPv4Address或IPv6Address對象;默認情況下,小于232的整數將被視為IPv4地址。如果地址不是有效的IPv4或IPv6地址,則會引發ValueError。代碼如下:

上面的代碼可以獨立運行,執行結果如下:

其次,將check_ip_func.py文件作為模塊,供其他Python程序調用。在check_ip_func.py文件同一目錄下,創建名為get_correct_ip.py文件,該文件將調用check_ip_func.py模塊中定義的check_ip()函數,以從地址列表中選擇正確的IP地址。


執行結果如下:

從上面的執行結果中可以看到,Python解釋器將模塊check_ip_func.py中的代碼也一塊兒執行了,執行結果中的前3行就是模塊check_ip_func.py的執行結果,但這并不是我們想要的結果。
想要避免這種情況的關鍵在于,要讓Python解釋器知道,當前要運行的程序是模塊本身,還是導入模塊的其他程序。在模塊check_ip_func.py中,僅僅定義函數,不需要其他的代碼,修改后的代碼如下:

而get_correct_ip.py程序保持不變,在執行get_correct_ip.py后即可得到我們想要的結果:

下面將介紹常用的3個網絡編程模塊:ipaddress模塊、netaddr模塊和tabulate模塊。
(1)ipaddress模塊
該模塊包括IPv4和IPv6地址的類,可以用來生成、驗證、查找IP地址。從Python 3.3開始,ipaddress模塊正式成為Python標準庫中的模塊之一,不需要安裝,可直接使用。
ipaddress模塊中有IPv4Address類和IPv6Address類,可分別用來處理IPv4和IPv6地址。由于IPv4Address和IPv6Address對象共享許多共同屬性,下面的案例將只處理IPv4格式,可以以類似的方式處理IPv6格式。
●ipaddress.ip_address()函數會根據傳入的字符串自動創建IPv4/IPv6 Address對象。

也可以使用正整數來創建地址,默認小于232的整數是IPv4地址,大于232的整數則是IPv6地址。

使用ipaddress.ip_address()創建IPv4Address對象有很多IPv4地址的屬性。

●使用ipaddress.ip_network()函數創建IPv4/IPv6Address對象。

ipaddress.ip_network()函數允許劃分網絡(子網劃分)。默認情況下,它將網絡劃分為兩個子網。

通過prefixlen_diff參數設置允許指定子網的位數。

●ipaddress.ip_interface()函數允許創建IPv4或IPv6接口對象。

(2)netaddr模塊
該模塊是Python處理IP地址和MAC地址的開源第三方庫,是用于對網絡地址段進行定義和操作的一個工具類。通過netaddr模塊可以以非常靈活的方式定義網段,獲取網段的一些常用信息,同時可以和網絡地址與網段進行一些包含關系的運算。
netaddr模塊不是Python的標準模塊,使用前需要安裝。

●IPAddress對象表示單個IP地址,可以接收一個IPv4或IPv6地址字符串。

●IPNetwork()是處理IP網段的方法,同樣可以接收一個IPv4或IPv6地址字符串。

●cidr_merge()是網段的匯總方法,它只接收列表,列表中必須含有要匯總的網段。

●EUI()是netaddr格式化MAC地址的方法,可以接收任何表達形式的MAC地址字符串。

(3)tabulate模塊
通過tabulate模塊可以精美地顯示數據。它不是Python標準庫,因此需要先進行安裝。

●tabulate模塊支持列表、字典等表格數據類型。模塊中的tabulate()函數用于制表。

●tabulate()函數還可以使用headers參數指定列名。

●tabulate()函數還可以使用參數tablefmt輸出網格。

- 2020年廣東公務員錄用考試專項教材:數量關系【考點精講+典型題(含歷年真題)詳解】
- 好車工是怎樣煉成的
- 靜電探測原理及應用
- 商業倫理教育與研究
- 醫用高等數學
- 系統工程:原理與實務
- 電子商務文案策劃與寫作全能一本通(微課版)
- 范先佐《教育經濟學新編》配套題庫【課后習題+章節題庫(含名??佳姓骖})+模擬試題】
- 首飾藝術設計(第2版)
- 宋朝武《民事訴訟法學》(第3版)筆記和課后習題(含考研真題)詳解
- 波德維爾《世界電影史》(第2版)配套題庫【名??佳姓骖}+章節題庫+模擬試題】
- 多恩布什《宏觀經濟學》(第10版)課后習題詳解
- 辦公自動化案例教程
- 謝柏青《大學計算機應用基礎》【教材精講+考研真題解析】講義與視頻課程【29小時高清視頻】
- SQL Server 2005數據庫及應用