Python 100天-從新手到大師學習筆記Day06:函式與模組的使用

閱讀時間約 9 分鐘


  • 函式的作用:

要寫出高質量的程式碼首先要解決的就是重複程式碼的問題。對於程式碼來說,我們可以將功能封裝到一個稱之為“函式”的功能模組中,在需要使用的地方,我們只需要“呼叫”這個“函式”就可以了。

'''
未使用函式,重複程式碼的案例
Version: Day06
Author: SQA yang
這段程式碼計算三個矩形面積時,每次都重複相同的邏輯
'''

# 計算矩形面積
length1 = 5
width1 = 10
area1 = length1 * width1
print(f"矩形1的面積是 {area1}")

# 計算另一個矩形的面積
length2 = 7
width2 = 3
area2 = length2 * width2
print(f"矩形2的面積是 {area2}")

# 計算第三個矩形的面積
length3 = 9
width3 = 4
area3 = length3 * width3
print(f"矩形3的面積是 {area3}")
未使用函式,重複相同的邏輯的程式碼

未使用函式,重複相同的邏輯的程式碼



  • 定義函式:

在Python中可以使用def關鍵字來定義函式,和變數一樣每個函式也有一個響亮的名字,而且命名規則跟變數的命名規則是一致的。函式執行完成後我們可以透過return關鍵字來返回一個值。

'''
使用函式重購程式碼的案例
消除了重複的程式碼
在這個版本中,calculate_area 函式被引入來避免重複程式碼
這樣可以讓程式更簡潔且易於維護。

Version: Day06
Author: SQA yang
'''

# 使用函式來計算矩形的面積
def calculate_area(length, width):
return length * width

# 計算並輸出矩形面積
length1, width1 = 5, 10
area1 = calculate_area(length1, width1)
print(f"矩形1的面積是 {area1}")

length2, width2 = 7, 3
area2 = calculate_area(length2, width2)
print(f"矩形2的面積是 {area2}")

length3, width3 = 9, 4
area3 = calculate_area(length3, width3)
print(f"矩形3的面積是 {area3}")
重構後使用函式的版本,消除了重複程式碼

重構後使用函式的版本,消除了重複程式碼



  • 函式的引數:

在Python中,函式的引數(即函式的參數)可以有預設值,也支援使用可變引數(接收任意數量的引數)

簡單來講:

  • 函式的預設值:允許我們在定義函式時給參數設置預設值,這樣可以在沒有提供對應參數時使用預設值來執行。
  • 可變引數:允許函式接收任意數量的參數,不需要知道具體的參數數量。



'''
當函式的引數有預設值時,可以選擇不傳入該引數,函式將使用預設值來運行。
'''
def greet(name="Guest"):
print("Hello, " + name)
# 調用函式時不傳參數,使用預設值
greet()  # 輸出: Hello, Guest
# 調用函式時傳入一個參數,覆蓋預設值
greet("Alice")  # 輸出: Hello, Alice

'''
在這個例子中,greet 函式的 name 參數有預設值 "Guest"
所以即使不傳入參數,函式也能正常工作。當傳入 "Alice",函式就會使用這個傳入的值。
'''
函式引數的預設值&可變引數

函式引數的預設值&可變引數


'''
結合預設值與可變引數
Version: Day06
Author: SQA yang
'''

# 函式 display_info 的第一個參數 name 有預設值 "Guest"
# 而後面的 *args 可以接收多個額外的參數
# 使用 *args 接收任意數量的位置引數。

def display_info(name="Guest", *args):
print(f"Name: {name}") # f"Name: {name}" 中的f是用來表示格式化字串
print("Additional Info:", args)

# 調用函式時只提供名字
display_info("Alice")  
# 輸出:
# Name: Alice
# Additional Info: ()

# 調用函式時提供名字和額外信息
display_info("Alice", 25, "Engineer", "New York")  
# 輸出:
# Name: Alice
# Additional Info: (25, 'Engineer', 'New York')

# 調用函式時不提供名字,使用預設值
display_info(25, "Engineer")  
# 輸出:
# Name: 25
# Additional Info: ('Engineer',)
結合函式預設值與可變引數的應用

結合函式預設值與可變引數的應用



  • 用模組管理函式:

對於任何一種程式語言來說,變數、函式會遇到命名衝突這種尷尬的情況。

Python沒有函式過載的概念,那麼後面的定義會覆蓋之前的定義,也就意味著兩個函式同名函式實際上只有一個是存在的。

'''
例如這裡定義了兩個函式foo()
那這樣輸出的結果是什麼呢?

Version: Day06
Author: SQA yang
'''
def foo():
print('hello, world!')

def foo():
print('goodbye, world!')

foo()
#會輸出goodbye, world! 因為後面的函式會覆蓋前面
後面的函式定義會覆蓋之前的定義

後面的函式定義會覆蓋之前的定義


在專案中,會遇到由多人協作進行團隊開發的狀況。

團隊中可能有多個程式設計師都定義了名為foo的函式,解決命名衝突其實很簡單,Python中每個檔案就代表了一個模組(module)。在使用函式的時候我們透過import關鍵字匯入指定的模組就可以區分到底要使用的是哪個模組中的foo函式。


module1.py

def foo():
print('hello, world!')

module2.py

def foo():
print('goodbye, world!')
'''
使用import匯入指定模組
這邊匯入的有module1.py和module2.py

Version: Day06
Author: SQA yang
'''

import module1
module1.foo()

import module2
module2.foo()

import module1 as m1
import module2 as m2
m1.foo()
m2.foo()
透過import關鍵字匯入指定的模組

透過import關鍵字匯入指定的模組



  • 變數的作用域:

看看下面這段程式碼,我們希望透過函式呼叫修改全域性變數a的值,但實際上下面的程式碼是做不到的。

def foo():
a = 200
print(a) # 200


if __name__ == '__main__':
a = 100
foo()
print(a) # 100
做不到呼叫修改全域性變數a的值

做不到呼叫修改全域性變數a的值


在呼叫foo函式後,我們發現a的值仍然是100,這是因為當我們在函式foo中寫a = 200的時候,是重新定義了一個名字為a的區域性變數,它跟全域性作用域的a並不是同一個變數,因為區域性作用域中有了自己的變數a,因此foo函式不再搜尋全域性作用域中的a。修改後的程式碼如下:


'''
使用global關鍵字
來指示foo函式中的變數a來自於全域性作用域

Version: Day06
Author: SQA yang
'''
def foo():
global a
a = 200
print(a)  # 200
if __name__ == '__main__':
a = 100
foo()
print(a)  # 200
使用global關鍵字來指示foo函式中的變數a來自於全域性作用域

使用global關鍵字來指示foo函式中的變數a來自於全域性作用域


在實際開發中,我們應該儘量減少對全域性變數的使用,因為全域性變數的作用域和影響過於廣泛,可能會發生意料之外的修改和使用,除此之外全域性變數比區域性變數擁有更長的生命週期,可能導致物件佔用的記憶體長時間無法被垃圾回收(不會釋放出記憶體空間)。


以上為Python100天從新手到大師的Day06學習筆記。

從一個低薪文組轉職軟體測試工程師Software Quality Assurance (SQA) Engineer的過程,紀錄閱讀過的相關測試書籍文獻,以及記錄自我技術成長的過程,包含手動測試與自動化測試相關工具等。
留言0
查看全部
發表第一個留言支持創作者!
本文介紹了學習Python後,如何將日常自然語言翻譯成程式碼。並運用所學知識解決實際問題。這些練習不僅鞏固了學習者的程式設計能力,還提升解決問題的思維能力。適合所有想要進一步瞭解程式設計邏輯的Python初學者閱讀。
在寫程式時,重複執行指令是常見需求。Python 提供了兩種迴圈結構:for-in 迴圈和 while 迴圈。for-in 迴圈適合已知迴圈次數或進行容器迭代;while 迴圈則用於不確定迴圈次數的情境。本文將介紹這兩種迴圈的基本用法及練習範例。
本文介紹了Python中的 if-elif 和else關鍵字的使用,構建分支結構的方式,以及巢狀結構的概念。文章中還提到Python編碼的最佳實踐,建議儘可能使用扁平化的結構而不是巢狀結構以提高可讀性。
在程式設計中,變數是儲存資料的基本單位,而型別則決定了資料的格式及使用方式。本文介紹了 Python 開發中的多種資料型別,包括整型、浮點型、字串、布林型及複數型,還提供了變數命名的規則及其使用方法。進一步探索運算子,包括比較運算子和邏輯運算子,以增強程式的邏輯判斷能力。
本文介紹如何在Windows命令行及VS Code中確認Python版本,並提供編寫第一個Python程式的步驟。重點在於註解的使用方式及其對程式可讀性的重要性。此外,還簡單介紹了turtle繪圖模組的應用,透過範例繪製佩佩豬,為Python學習者提供實用的參考與指導。
這篇文章提供了一個詳細的指南,教你如何在你的電腦上下載和設置Python開發環境,尤其是使用VScode編輯器。從Python的下載與安裝到VScode的設置,這裡還涵蓋了安裝中文語言包的步驟,讓你的編程環境更加友好。
本文介紹了學習Python後,如何將日常自然語言翻譯成程式碼。並運用所學知識解決實際問題。這些練習不僅鞏固了學習者的程式設計能力,還提升解決問題的思維能力。適合所有想要進一步瞭解程式設計邏輯的Python初學者閱讀。
在寫程式時,重複執行指令是常見需求。Python 提供了兩種迴圈結構:for-in 迴圈和 while 迴圈。for-in 迴圈適合已知迴圈次數或進行容器迭代;while 迴圈則用於不確定迴圈次數的情境。本文將介紹這兩種迴圈的基本用法及練習範例。
本文介紹了Python中的 if-elif 和else關鍵字的使用,構建分支結構的方式,以及巢狀結構的概念。文章中還提到Python編碼的最佳實踐,建議儘可能使用扁平化的結構而不是巢狀結構以提高可讀性。
在程式設計中,變數是儲存資料的基本單位,而型別則決定了資料的格式及使用方式。本文介紹了 Python 開發中的多種資料型別,包括整型、浮點型、字串、布林型及複數型,還提供了變數命名的規則及其使用方法。進一步探索運算子,包括比較運算子和邏輯運算子,以增強程式的邏輯判斷能力。
本文介紹如何在Windows命令行及VS Code中確認Python版本,並提供編寫第一個Python程式的步驟。重點在於註解的使用方式及其對程式可讀性的重要性。此外,還簡單介紹了turtle繪圖模組的應用,透過範例繪製佩佩豬,為Python學習者提供實用的參考與指導。
這篇文章提供了一個詳細的指南,教你如何在你的電腦上下載和設置Python開發環境,尤其是使用VScode編輯器。從Python的下載與安裝到VScode的設置,這裡還涵蓋了安裝中文語言包的步驟,讓你的編程環境更加友好。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
這章節的目的是介紹 Kotlin 語言中函數的基本用法和概念,包括函數的聲明、使用、參數和返回值等。通過學習這章節,讀者可以熟練掌握如何在 Kotlin 中定義和使用函數,來解決各種問題。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
這章節的目的是介紹 Kotlin 語言中函數的基本用法和概念,包括函數的聲明、使用、參數和返回值等。通過學習這章節,讀者可以熟練掌握如何在 Kotlin 中定義和使用函數,來解決各種問題。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。