[Python基礎]理解變數作用域

更新於 發佈於 閱讀時間約 6 分鐘

在Python中,有三種變數作用域:全域區域封閉

  1. 區域作用域(Local Scope):
    • 在函式內部定義的變數具有區域作用域,它們只能在該函式內部訪問。
    • 例如:
def my_function():
local_variable = 10
  1. 封閉作用域(Enclosing Scope):
    • 在巢狀函式結構中,內層函式可以訪問外層函式的變數,這些變數屬於封閉作用域。
    • 例如:
def outer_function():
outer_variable = 20
def inner_function():
print(outer_variable)
  1. 全域作用域(Global Scope):
    • 在整個程式中定義的變數擁有全域作用域,可以在程式的任何地方訪問。
    • 例如:
global_variable = 42

def my_function():
print(global_variable)

# 在函式外部訪問全域變數
print(global_variable)

# 在函式內部訪問全域變數
my_function()

程式範例(全域變數+區域變數)

在此範例,我們先釐清在一段程式碼中,全域變數區域變數的差異,若程式發開時訪問對於程式不存在的變數時就會產生error的出現。

# 全域變數
global_variable = 42

def my_function():
# 區域變數
local_variable = 10

# 在函式內部訪問全域變數
print("在函式內部訪問全域變數:", global_variable)

# 在函式內部訪問區域變數
print("在函式內部訪問區域變數:", local_variable)

# 在函式外部訪問全域變數
print("在函式外部訪問全域變數:", global_variable)

# 在函式外部訪問區域變數(會引發 NameError)
# print("Outside function - Local Variable:", local_variable)

# 呼叫函式
my_function()

# 修改全域變數的值
global_variable = 100

# 在修改後的函數外部再次訪問全域變數
print("在修改後的函數外部再次訪問全域變數:", global_variable)

在範例中print會在Console上輸出字串,有此範例可見全域變數在整段程式碼中都可以被拿出來做使用。

程式範例輸出圖

程式範例輸出圖


若在函式內定義的區域變數,在函式外使用就會出現以下錯誤

我們將上面的範例,將這段#拿掉,取消註解來試試看會出現什麼錯誤

# 在函式外部訪問區域變數(會引發 NameError)
print("Outside function - Local Variable:", local_variable)
錯誤提醒

錯誤提醒

在上圖呈現的,NameError: name 'local_variable' is not defined就是代表local_variable這個變數沒有被定義,所以無法做使用,這個變數並沒有昭告天下,所以眾所皆不知,只有函數自己知道。


程式範例(區域變數+封閉變數)

內層函式inner_function()可以訪問外層函式outer_function()的變數inner_variable

但外層函式outer_function()無法訪問內層函式的變數outer_variable

恩~有點繞口令,可以把內層函式想像成在家裡面你看的到外面的人,但外層函式是外面所以看不到裡面。

def outer_function():
# 外層函式的區域變數
outer_variable = 20

def inner_function():
# 內層函式的區域變數
inner_variable = 30

# 封閉變數:內層函式可以訪問外層函式的變數
print("Inner Function - Outer Variable:", outer_variable)

# 呼叫內層函式
inner_function()

# 在外層函數內訪問內層函數的區域變數(會引發 NameError)
# print("Outer Function - Inner Variable:", inner_variable)

# 呼叫外層函式
outer_function()

此範例跑的流程為,呼叫外層函式時,會先定義內層函式,然後跑到呼叫函式,則會印出外層函式的區域變數outer_variable = 20

程式輸出圖

程式輸出圖



我們試著在外層函式訪問內層的變數看看,修改這段把註解拿掉。

# 在外層函式內訪問內層函數的區域變數(會引發 NameError)
print("Outer Function - Inner Variable:", inner_variable)

就會引發錯誤,在外層函式無法辨識inner_variable這個封閉的變數。

錯誤視窗

錯誤視窗


總結

全域變數,在哪裡都可以做使用

區域變數,可以在定義的函式內可以做使用,包括函式中的函式也可以

封閉變數,只有在定義的函式內可以做使用

用姓名來舉例說明,我的姓名就像全域變數一樣,大家都知道,區域變數就綽號一樣只有熟的人才會知道,小名就像封閉變數,只有家人才會知道,在不同關係中角色就不一樣,若是跟比較不熟的提起自己的小名,可能只有滿頭問號這小名指的是誰的概念套用到變數定義上。

全域變數比喻成姓名

區域變數比喻成綽號

封閉變數比喻成小名


希望這樣解說,可以更明白其中的差異,謝謝大家觀看,若有問題或是需要改進的地方在留言讓我知道



留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
147會員
264內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News