首頁 > 運動

Python基礎程式設計——模組的基本概念

由 Python程式設計愛好者 發表于 運動2021-07-01

簡介py程式本身也是一個模組,執行這個模組時,相當於在這個模組的作用域內定義了say_hi函式,在模組的全域性作用域內定義的我們都可以直接使用類似say_hi_module

模組是什麼

到此,我們已經介紹了Python語言的大部分基礎知識,Python不僅語言核心非常強大,還提供了其他工具以供我們在開發中使用。標準安裝包含一組成為標準庫的模組,例如:math、random、time等。

模組

模組就是我們所編寫的Python程式,我們在之前的章節中有使用過import關鍵字來將模組匯入到我們的程式中。如果我們要編寫自己的模組,需要將編寫的程式儲存到一個。py的檔案中,這個檔案的檔名就是我們的模組名。例如:我們編寫了一個hello_world。py的檔案,那麼在這裡hello_world就是我們的模組名。在Python中,我們自己編寫的模組所存放的路徑也很重要,當匯入我們自己編寫的模組時,出現的最多的問題,找不到模組而導致程式執行失敗。

我們在前面的章節中,所有的示例程式基本上都是編寫在。py的檔案中,那麼我們可以將它們作為模組來匯入。下面我們再來看一個簡單的模組,具體如下hello_world。py程式所示:

,hello_world。py#!/usr/bin/env python# -*- coding: utf-8 -*-def hello(): print(‘Hello World!’)

我們在另一個程式中來匯入hello_world。py,具體如下test_hello_world。py程式所示:

test_hello_world。py#!/usr/bin/env python# -*- coding: utf-8 -*-import hello_worldhello_world。hello()程式執行結果如下所示:Hello World!

透過上面的兩個程式,我們簡單介紹瞭如何自定義一個模組以及在其他的程式中匯入我們自定義的模組。

需要注意的是:模組並不是用來執行操作的,而是用於定義變數、函式、類等的,定義只需要做一次,因此匯入模組一次和多次的效果相同,我們在開發中只需要匯入一次模組即可。

模組的作用

模組是用來下定義的,在首次被匯入程式時執行,這雖然有點用,但是用處不大。讓模組值得被建立的原因在於它們像類一樣,有自己的作用域。這意味著在模組中定義的類和函式以及其進行賦值的變數都將成為模組的屬性。並且有了模組,能夠大大提高程式的複用性,減少重複開發的工作量。

在模組中定義函式

我們先來編寫一個簡單的模組,只在模組中定義一個用於打招呼的函式,具體如下say_hi_module。py程式所示:

say_hi_module。py#!/usr/bin/env python# -*- coding: utf-8 -*-def say_hi(): print(‘你好,我的名字是Python程式設計愛好者!’)

然後我們在另一個程式中匯入say_hi_module。py模組,具體如下test_say_hi_module。py程式所示:

test_say_hi_module。py#!/usr/bin/env python# -*- coding: utf-8 -*-import say_hi_modulesay_hi_module。say_hi()程式執行結果如下所示:你好,我的名字是Python程式設計愛好者!

上面的test_say_hi_module。py程式本身也是一個模組,執行這個模組時,相當於在這個模組的作用域內定義了say_hi函式,在模組的全域性作用域內定義的我們都可以直接使用類似say_hi_module。say_hi()這樣的方式進行訪問。

我們沒有在test_say_hi_module。py程式中重新定義say_hi函式,主要是為了程式碼能夠複用,不用在需要使用say_hi函式的地方進行重新定義。因此,為了提高程式碼的複用性,務必將其模組化。

在模組中新增測試程式碼

模組用於定義函式和類等,但在有些情況下,新增一些測試程式碼來檢查情況是否符合預期。例如我們在前面的say_hi_module。py程式中新增一行呼叫函式的程式碼,看是否能夠列印我們想要的結果,具體入下say_hi_module。py程式所示:

say_hi_module。py#!/usr/bin/env python# -*- coding: utf-8 -*-def say_hi(): print(‘你好,我的名字是Python程式設計愛好者!’)# 測試程式碼say_hi()

如果將這個模組作為普通程式執行,他依然可以正常執行,並列印我們想要的結果。但是如果是將其作為一個模組,在另一個程式中匯入,以便我們能夠使用say_hi函式,測試程式碼也將會被執行。

這並不是我們想要的結果,要避免這種情況,關鍵是檢查模組是作為程式執行還是被匯入另一個程式。為此,我們需要使用變數__name__。我們修改前面的模組程式,具體如下say_hi_module。py程式所示:

say_hi_module。py#!/usr/bin/env python# -*- coding: utf-8 -*-def say_hi(): print(‘你好,我的名字是Python程式設計愛好者!’)def test(): say_hi()if __name__ == ‘__main__’: test()

我們再次執行程式test_say_hi_module。py時,其執行結果如下:

你好,我的名字是Python程式設計愛好者!

這是因為,在主程式中時,變數__name__的值是‘__main__’,而在匯入模組中的程式中時,這個變數被設定為為模組的名稱。因此在不會執行模組if語句裡面的語句塊。如果將這個模組作為程式執行,將會執行函式say_hi,如果是作為模組匯入到其他程式中,則其與普通模組是一樣的。

在上面的程式中,我們將測試程式碼放到了一個test函式中,雖然可以直接將其放到if語句裡面,但是,這樣做的好處是我們可以在匯入模組的程式中對其進行測試。

總結

本節主要介紹了以下內容:

模組的概念:模組的本質就是一個。py的程式檔案。

模組的作用:模組是用於定義函式、類、屬性等的,提高程式碼的複用性。

在模組中定義函式的函式,在匯入程式後,我們可以像訪問類屬性那樣直接訪問模組中的函式,模組中定義的類、變數也是一樣的。

在模組中新增測試程式碼,需要注意測試程式碼的執行條件。

下一節我們將會介紹模組的存放路徑的問題,這也是我們在匯入自定義模組容易出問題的地方,敬請關注!

如果有需要文中小程式的可以私信我喲!

創作不容易,還請點個贊!喜歡的小夥伴請點關注、收藏!

歡迎大家轉發、評論!

Tags:模組HIsayPy程式