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

●導(dǎo)入模塊中的某個(gè)或某些函數(shù):from模塊名import函數(shù)名。

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

上面的代碼可以獨(dú)立運(yùn)行,執(zhí)行結(jié)果如下:

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


執(zhí)行結(jié)果如下:

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

而get_correct_ip.py程序保持不變,在執(zhí)行g(shù)et_correct_ip.py后即可得到我們想要的結(jié)果:

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

也可以使用正整數(shù)來(lái)創(chuàng)建地址,默認(rèn)小于232的整數(shù)是IPv4地址,大于232的整數(shù)則是IPv6地址。

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

●使用ipaddress.ip_network()函數(shù)創(chuàng)建IPv4/IPv6Address對(duì)象。

ipaddress.ip_network()函數(shù)允許劃分網(wǎng)絡(luò)(子網(wǎng)劃分)。默認(rèn)情況下,它將網(wǎng)絡(luò)劃分為兩個(gè)子網(wǎng)。

通過(guò)prefixlen_diff參數(shù)設(shè)置允許指定子網(wǎng)的位數(shù)。

●ipaddress.ip_interface()函數(shù)允許創(chuàng)建IPv4或IPv6接口對(duì)象。

(2)netaddr模塊
該模塊是Python處理IP地址和MAC地址的開源第三方庫(kù),是用于對(duì)網(wǎng)絡(luò)地址段進(jìn)行定義和操作的一個(gè)工具類。通過(guò)netaddr模塊可以以非常靈活的方式定義網(wǎng)段,獲取網(wǎng)段的一些常用信息,同時(shí)可以和網(wǎng)絡(luò)地址與網(wǎng)段進(jìn)行一些包含關(guān)系的運(yùn)算。
netaddr模塊不是Python的標(biāo)準(zhǔn)模塊,使用前需要安裝。

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

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

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

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

(3)tabulate模塊
通過(guò)tabulate模塊可以精美地顯示數(shù)據(jù)。它不是Python標(biāo)準(zhǔn)庫(kù),因此需要先進(jìn)行安裝。

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

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

●tabulate()函數(shù)還可以使用參數(shù)tablefmt輸出網(wǎng)格。

- 許小明《新編日語(yǔ)教程4(第三版)》學(xué)習(xí)指南【課文重點(diǎn)+詞匯剖析+語(yǔ)法精解+拓展知識(shí)+全文翻譯】
- 財(cái)務(wù)管理:原理、案例與應(yīng)用
- 大宗商品金融綜合實(shí)驗(yàn)
- 醫(yī)用高等數(shù)學(xué)
- 工程地質(zhì)
- 彭聃齡《普通心理學(xué)》(第4版)筆記和課后習(xí)題(含考研真題)詳解
- 朱葉《公司金融》(第2版)筆記和課后習(xí)題詳解
- 楊豈深《英國(guó)文學(xué)選讀Book 2》筆記和考研真題詳解
- 高分子材料加工原理(第3版)
- 外事工作實(shí)務(wù)
- 通信用戶線路終端安裝與維護(hù)
- PowerPoint 2010商務(wù)演示文稿制作
- 汽車檢測(cè)技術(shù)
- 廣東開放大學(xué)思想政治理論課學(xué)習(xí)指南(本科)
- PLC基礎(chǔ)及應(yīng)用教程(三菱FX2N系列):第2版