1. 程式人生 > >跟我一起自學python語言8(8.6 將函式儲存在模組中)

跟我一起自學python語言8(8.6 將函式儲存在模組中)

2019年,新年新開始。咱們繼續自學python。希望想學的要跟上加油奧。這些都是語法基礎。python基礎很簡單。相信大家也能看懂了。關鍵是要堅持看完。

喜歡python就關注冠山巡山使。 我將跟大家一塊自學完python語言。

8.6 將函式儲存在模組中

函式的優點之一是,使用它們可將程式碼塊與主程式分離。通過給函式指定描述性名稱,可讓主程式容易理解得多。你還可以更進一步,將函式儲存在被稱為模組的獨立檔案中,再將模組匯入到主程式中。 import語句允許在當前執行的程式檔案中使用模組中的程式碼。

通過將函式儲存在獨立的檔案中,可隱藏程式程式碼的細節,將重點放在程式的高層邏輯上。這還能讓你在眾多不同的程式中重用函式。將函式儲存在獨立檔案中後,可與其他程式設計師共享這些檔案而不是整個程式。知道如何匯入函式還能讓你使用其他程式設計師編寫的函式庫。學習資料也可以加下Python扣扣裙:3零4零5零799自己下載學習下。

匯入模組的方法有多種,下面對每種都作簡要的介紹。

8.6.1 匯入整個模組

要讓函式是可匯入的,得先建立模組。 模組是副檔名為.py的檔案,包含要匯入到程式中的程式碼。下面來建立一個包含函式make_pizza()的模組。為此,我們將檔案pizza.py中除函式make_pizza()之外的其他程式碼都刪除:

pizza.py (以前命名可以隨便。這個命名就得用這個嘍。不然調用出錯了)

程式碼1(被呼叫檔案)

def make_pizza(size, *toppings):

"""概述要製作的比薩"""

print("Making a " + str(size) +

"-inch pizza with the following toppings:")

for topping in toppings:

print("- " + topping)

接下來,我們在pizza.py所在的目錄中建立另一個名為making_pizzas.py的檔案,這個檔案匯入剛建立的模組,再呼叫make_pizza()兩次:

making_pizzas.py

程式碼2(測試正常)

import pizza

pizza.make_pizza(16, 'pepperoni')

pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

Python讀取這個檔案時,程式碼行import pizza讓Python開啟檔案pizza.py,並將其中的所有函式都複製到這個程式中。你看不到複製的程式碼,因為這個程式執行時, Python在幕後複製這些程式碼。你只需知道,在making_pizzas.py中,可以使用pizza.py中定義的所有函式。

要呼叫被匯入的模組中的函式,可指定匯入的模組的名稱pizza和函式名make_pizza(),並用句點分隔它們(見Ø)。這些程式碼的輸出與沒有匯入模組的原始程式相同:

Making a 16-inch pizza with the following toppings:

- pepperoni

Making a 12-inch pizza with the following toppings:

- mushrooms

- green peppers

- extra cheese

這就是一種匯入方法:只需編寫一條import語句並在其中指定模組名,就可在程式中使用該模組中的所有函式。如果你使用這種import語句匯入了名為module_name.py的整個模組,就可使用下面的語法來使用其中任何一個函式:

module_name.function_name()

8.6.2 匯入特定的函式

你還可以匯入模組中的特定函式,這種匯入方法的語法如下:

from 模組名 import 函式名

通過用逗號分隔函式名,可根據需要從模組中匯入任意數量的函式:

from module_name import function_0, function_1, function_2

對於前面的making_pizzas.py示例,如果只想匯入要使用的函式,程式碼將類似於下面這樣:

程式碼3(測試正常)

from pizza import make_pizza

#匯入模組pizza中的特定函式 make_pizza()

make_pizza(16, 'pepperoni')

#直接呼叫函式make_pizza()就可以了

make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

若使用這種語法,呼叫函式時就無需使用句點。由於我們在import語句中顯式地匯入了函式make_pizza(),因此呼叫它時只需指定其名稱。

8.6.3 使用 as 給函式指定別名

如果要匯入的函式的名稱可能與程式中現有的名稱衝突,或者函式的名稱太長,可指定簡短而獨一無二的別名——函式的另一個名稱,類似於外號。要給函式指定這種特殊外號,需要在匯入它時這樣做。

下面給函式make_pizza()指定了別名mp()。這是在import語句中使用make_pizza as mp實現的,關鍵字as將函式重新命名為你提供的別名:

程式碼4(測試正常)

from pizza import make_pizza as mp

#匯入模組pizza中的特定函式 make_pizza() 起個別名 mp

mp(16, 'pepperoni')

#直接呼叫別名函式mp()就可以了

mp(12, 'mushrooms', 'green peppers', 'extra cheese')

上面的 import語句將函式 make_pizza()重新命名為 mp();在這個程式中,每當需要呼叫make_pizza()時,都可簡寫成mp(),而Python將執行make_pizza()中的程式碼,這可避免與這個程式可能包含的函式make_pizza()混淆。

指定別名的通用語法如下:

from module_name import function_name as fn

#from 模組名 import 函式名 as 別名

8.6.4 使用 as 給模組指定別名

你還可以給模組指定別名。通過給模組指定簡短的別名(如給模組pizza指定別名p),讓你能夠更輕鬆地呼叫模組中的函式。相比於pizza.make_pizza(), p.make_pizza()更為簡潔:

程式碼5(測試正常)

import pizza as p

#給模組指定別名p

p.make_pizza(16, 'pepperoni')

p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

上述import語句給模組pizza指定了別名p,但該模組中所有函式的名稱都沒變。呼叫函式make_pizza()時,可編寫程式碼p.make_pizza()而不是pizza.make_pizza(),這樣不僅能使程式碼更簡潔,還可以讓你不再關注模組名,而專注於描述性的函式名。這些函式名明確地指出了函式的功能,對理解程式碼而言,它們比模組名更重要。

給模組指定別名的通用語法如下:

import module_name as mn

# import 模組名 as 模組別名

8.6.5 匯入模組中的所有函式

使用星號(*)運算子可讓Python匯入模組中的所有函式:

程式碼5(測試正常)

from pizza import *

#使用星號(*)運算子可讓Python匯入模組中的所有函式

make_pizza(16, 'pepperoni')

make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

import語句中的星號讓Python將模組pizza中的每個函式都複製到這個程式檔案中。由於匯入了每個函式,可通過名稱來呼叫每個函式,而無需使用句點表示法。然而,使用並非自己編寫的大型模組時,最好不要採用這種匯入方法:如果模組中有函式的名稱與你的專案中使用的名稱相同,可能導致意想不到的結果: Python可能遇到多個名稱相同的函式或變數,進而覆蓋函式,而不是分別匯入所有的函式。

最佳的做法是,要麼只匯入你需要使用的函式,要麼匯入整個模組並使用句點表示法。這能讓程式碼更清晰,更容易閱讀和理解。這裡之所以介紹這種匯入方法,只是想讓你在閱讀別人編寫的程式碼時,如果遇到類似於下面的import語句,能夠理解它們:

from module_name import *

# from 模組名 import 所有函式

8.7 函式編寫指南

編寫函式時,需要牢記幾個細節。應給函式指定描述性名稱,且只在其中使用小寫字母和下劃線。描述性名稱可幫助你和別人明白程式碼想要做什麼。給模組命名時也應遵循上述約定。

每個函式都應包含簡要地闡述其功能的註釋,該註釋應緊跟在函式定義後面,並採用文件字串格式。文件良好的函式讓其他程式設計師只需閱讀文件字串中的描述就能夠使用它:他們完全可以相信程式碼如描述的那樣執行;只要知道函式的名稱、需要的實參以及返回值的型別,就能在自己的程式中使用它。

給形參指定預設值時,等號兩邊不要有空格:

def function_name(parameter_0, parameter_1='default value')

對於函式呼叫中的關鍵字實參,也應遵循這種約定:

function_name(value_0, parameter_1='value')

PEP 8(https://www.python.org/dev/peps/pep-0008/)建議程式碼行的長度不要超過79字元,這樣只要編輯器視窗適中,就能看到整行程式碼。如果形參很多,導致函式定義的長度超過了79字元,可在函式定義中輸入左括號後按回車鍵,並在下一行按兩次Tab鍵,從而將形參列表和只縮排一層的函式體區分開來。

大多數編輯器都會自動對齊後續引數列表行,使其縮排程度與你給第一個引數列表行指定的縮排程度相同:

def function_name(

parameter_0, parameter_1, parameter_2,

parameter_3, parameter_4, parameter_5):

function body...

如果程式或模組包含多個函式,可使用兩個空行將相鄰的函式分開,這樣將更容易知道前一個函式在什麼地方結束,下一個函式從什麼地方開始。

所有的import語句都應放在檔案開頭,唯一例外的情形是,在檔案開頭使用了註釋來描述整個程式。

8.8 小結

在本章中,你學習了:如何編寫函式,以及如何傳遞實參,讓函式能夠訪問完成其工作所需的資訊;如何使用位置實參和關鍵字實參,以及如何接受任意數量的實參;顯示輸出的函式和返回值的函式;如何將函式同列表、字典、 if語句和while迴圈結合起來使用。你還知道了如何將函式儲存在被稱為模組的獨立檔案中,讓程式檔案更簡單、更易於理解。最後,你學習了函式編寫指南,遵循這些指南可讓程式始終結構良好,並對你和其他人來說易於閱讀。

程式設計師的目標之一是,編寫簡單的程式碼來完成任務,而函式有助於你實現這樣的目標。它們讓你編寫好程式碼塊並確定其能夠正確執行後,就可置之不理。確定函式能夠正確地完成其工作後,你就可以接著投身於下一個編碼任務。

函式讓你編寫程式碼一次後,想重用它們多少次就重用多少次。需要執行函式中的程式碼時,只需編寫一行函式呼叫程式碼,就可讓函式完成其工作。需要修改函式的行為時,只需修改一個程式碼塊,而所做的修改將影響呼叫這個函式的每個地方。

使用函式讓程式更容易閱讀,而良好的函式名概述了程式各個部分的作用。相對於閱讀一系列的程式碼塊,閱讀一系列函式呼叫讓你能夠更快地明白程式的作用。

函式還讓程式碼更容易測試和除錯。如果程式使用一系列的函式來完成其任務,而其中的每個函式都完成一項具體的工作,測試和維護起來將容易得多:你可編寫分別呼叫每個函式的程式,並測試每個函式是否在它可能遇到的各種情形下都能正確地執行。經過這樣的測試後你就能信心滿滿,深信你每次呼叫這些函式時,它們都將正確地執行。

第9章,你將學習編寫類類將函式和資料整潔地封裝起來,讓你能夠靈活而高效地使用它們。

如果喜歡可以 點贊+關注冠山巡山使 or 評論+轉發此文章讓其他喜歡Python的同學看到吆 。明天見!

關注冠山巡山使+私信:“編輯器”三個字 就可以有這個編輯器的下載地址了。

關注冠山巡山使+私信:“自學python”可以下載此教程!(我是參考此教程做的自學課程。大多數人兒只是下載下來。看完的很少。希望能跟我一塊自學完!)