vocus logo

方格子 vocus

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學習筆記。

留言
avatar-img
軟體測試工程師Yang
2會員
14內容數
從一個低薪文組轉職軟體測試工程師Software Quality Assurance (SQA) Engineer的過程,紀錄閱讀過的相關測試書籍文獻,以及記錄自我技術成長的過程,包含手動測試與自動化測試相關工具等。
2024/11/30
這篇文章介紹物件導向程式設計(OOP)的基本概念,包括類和物件的定義以及四大核心概念:封裝、繼承、多型和抽象。讀者將瞭解如何在Python中定義類和物件,並學習如何使用這些OOP特性來構建更具組織性和可維護性的程式碼。透過實例,文章探討如何將真實世界的物件模擬到程式設計中。
Thumbnail
2024/11/30
這篇文章介紹物件導向程式設計(OOP)的基本概念,包括類和物件的定義以及四大核心概念:封裝、繼承、多型和抽象。讀者將瞭解如何在Python中定義類和物件,並學習如何使用這些OOP特性來構建更具組織性和可維護性的程式碼。透過實例,文章探討如何將真實世界的物件模擬到程式設計中。
Thumbnail
2024/10/27
本篇文章探討了Python中的字串、列表、元組、集合與字典這五種資料類型的定義與基本操作。這些資料類型各具特點,例如字串和元組是不可變的,列表和集合是可變的,適合不同的使用場景。文章中詳細介紹如何定義進行基本的操作(如添加、刪除、訪問元素等)。
Thumbnail
2024/10/27
本篇文章探討了Python中的字串、列表、元組、集合與字典這五種資料類型的定義與基本操作。這些資料類型各具特點,例如字串和元組是不可變的,列表和集合是可變的,適合不同的使用場景。文章中詳細介紹如何定義進行基本的操作(如添加、刪除、訪問元素等)。
Thumbnail
2024/10/20
本文介紹了學習Python後,如何將日常自然語言翻譯成程式碼。並運用所學知識解決實際問題。這些練習不僅鞏固了學習者的程式設計能力,還提升解決問題的思維能力。適合所有想要進一步瞭解程式設計邏輯的Python初學者閱讀。
Thumbnail
2024/10/20
本文介紹了學習Python後,如何將日常自然語言翻譯成程式碼。並運用所學知識解決實際問題。這些練習不僅鞏固了學習者的程式設計能力,還提升解決問題的思維能力。適合所有想要進一步瞭解程式設計邏輯的Python初學者閱讀。
Thumbnail
看更多
你可能也想看
Thumbnail
第三章資料型態與函式重點整理,涵蓋純量型別、整數型別、浮點數型別、字元型別、布林值型別、組合型別 (Tuple、Array)、函式定義、型別提示、流程控制 (分支判斷、迴圈),並與其他程式語言如 Java, JavaScript, Python, TypeScript作比較。
Thumbnail
第三章資料型態與函式重點整理,涵蓋純量型別、整數型別、浮點數型別、字元型別、布林值型別、組合型別 (Tuple、Array)、函式定義、型別提示、流程控制 (分支判斷、迴圈),並與其他程式語言如 Java, JavaScript, Python, TypeScript作比較。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
介紹邏輯運算的觀念,包含布林值、運算子與運算式的介紹。並說明如何使用 Python 撰寫這些觀念。
Thumbnail
介紹邏輯運算的觀念,包含布林值、運算子與運算式的介紹。並說明如何使用 Python 撰寫這些觀念。
Thumbnail
這篇文章將會介紹函式(Function)及其回傳值(retrun)的定義及介紹。
Thumbnail
這篇文章將會介紹函式(Function)及其回傳值(retrun)的定義及介紹。
Thumbnail
筆者只能說,沒有一致性的辦法,若以本篇著重在中段學生的狀況,過去的習慣,對成績最有效的辦法,是刷題目。但不是盲刷,是依照程度不同,自己要製作學習單,一次就針對一個小節,給個十題八題就好,讓中等程度的學生快速抓到這個題型的概念,跟大致切入的角度。
Thumbnail
筆者只能說,沒有一致性的辦法,若以本篇著重在中段學生的狀況,過去的習慣,對成績最有效的辦法,是刷題目。但不是盲刷,是依照程度不同,自己要製作學習單,一次就針對一個小節,給個十題八題就好,讓中等程度的學生快速抓到這個題型的概念,跟大致切入的角度。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
資料型態-變數概念 上面這張圖片傳傳達了三個概念, 常值:可以是數值、浮點數、字串、布林等資料, 變數名稱:這邊也很好理解,就是好記得名稱,這邊使用中文是方便初學者入門, 盒子:代表在Python底層運作的狀況,Python創建變數時,會先在記憶體創建型態物件,這邊是數字型態,所以創建數字物件。
Thumbnail
資料型態-變數概念 上面這張圖片傳傳達了三個概念, 常值:可以是數值、浮點數、字串、布林等資料, 變數名稱:這邊也很好理解,就是好記得名稱,這邊使用中文是方便初學者入門, 盒子:代表在Python底層運作的狀況,Python創建變數時,會先在記憶體創建型態物件,這邊是數字型態,所以創建數字物件。
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
本章將介紹 C 語言的函式 (Functions),這是將程式碼模組化、提高可讀性與重用性 的關鍵技術。透過函式,我們可以 拆分程式邏輯、減少重複代碼,本章亦透過實作讓讀者學習 參數傳遞、回傳值、遞迴等重要觀念。
Thumbnail
本章將介紹 C 語言的函式 (Functions),這是將程式碼模組化、提高可讀性與重用性 的關鍵技術。透過函式,我們可以 拆分程式邏輯、減少重複代碼,本章亦透過實作讓讀者學習 參數傳遞、回傳值、遞迴等重要觀念。
Thumbnail
這篇文章為介紹C#基礎知識的一部分,如果你是直接開始寫程式的C#程式員,可以看看這篇文章補足一些基礎知識。
Thumbnail
這篇文章為介紹C#基礎知識的一部分,如果你是直接開始寫程式的C#程式員,可以看看這篇文章補足一些基礎知識。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News