官术网_书友最值得收藏!

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輸出網格。

主站蜘蛛池模板: 驻马店市| 松潘县| 原平市| 台前县| 九台市| 堆龙德庆县| 陵水| 大埔区| 仁寿县| 竹山县| 靖江市| 台南市| 株洲市| 锦州市| 舒兰市| 黔西县| 武陟县| 怀柔区| 通江县| 西乌珠穆沁旗| 襄城县| 乡城县| 金坛市| 贺州市| 教育| 长乐市| 册亨县| 台中市| 梅河口市| 儋州市| 洛南县| 界首市| 莱芜市| 临颍县| 宜昌市| 河间市| 土默特右旗| 沅江市| 呼伦贝尔市| 呼和浩特市| 开鲁县|