認識 Python 的變數 (Variables)。變數是程式設計中最基礎且重要的概念之一。
簡單來說,變數就像電腦記憶體中的一個標籤或容器,您可以將各種不同的資料(例如數字、文字、真假值等)儲存到這個容器中。透過這個標籤,您可以在程式碼中方便地存取和操作這些資料。
變數的特性:
- 儲存資料: 變數的主要功能是儲存資料。
- 可變性 (Variable): 這也是變數名稱的由來。儲存在變數中的資料可以在程式執行過程中被修改或替換成新的資料。
- 命名規則: 變數需要一個名稱,這個名稱需要遵循特定的規則(稍後會詳細說明)。
- 資料型態: 變數本身沒有固定的資料型態,Python 會根據您賦予變數的值自動判斷其資料型態(這稱為動態型別)。
如何宣告和賦值變數?
在 Python 中,您不需要像某些其他程式語言一樣顯式地宣告變數的資料型態。您只需要直接賦值給一個變數名稱,Python 就會自動創建這個變數並將值儲存進去。
賦值使用等號 =
這個賦值運算符。等號的左邊是變數的名稱,右邊是要儲存的值。

變數的命名規則:
在 Python 中,變數名稱需要遵循以下規則:
- 只能包含字母 (a-z, A-Z)、數字 (0-9) 和底線 (_)。
- 不能以數字開頭。
- 區分大小寫 (case-sensitive)。 例如,
myVariable
和myvariable
是不同的變數。 - 不能使用 Python 的保留字 (keywords)。 這些是 Python 語言本身具有特殊意義的單字,例如
if
、else
、for
、while
、def
、class
等。
良好的變數命名習慣:
雖然 Python 的命名規則很寬鬆,但為了提高程式碼的可讀性和可維護性,建議遵循以下良好的命名習慣:
- 使用具有描述性的名稱: 變數名稱應該清楚地表達其儲存的資料的含義。例如,使用
user_name
而不是n
,使用total_amount
而不是ta
。 - 使用小寫字母和底線分隔單字 (snake_case): 這是在 Python 中最常見的變數命名風格。例如:
student_id
、file_path
、number_of_items
。 - 避免使用單個字元作為變數名稱 (除非是迴圈計數器等常見用法): 例如,使用
count
而不是c
。 - 保持命名風格的一致性。
變數的資料型態 (Python 的動態型別):
Python 是一種動態型別的語言,這意味著您不需要在宣告變數時指定其資料型態。Python 會根據您賦予變數的值自動判斷其資料型態。
常見的 Python 資料型態包括:
- 整數 (int): 例如
10
,-5
,0
。 - 浮點數 (float): 例如
3.14
,-2.5
,0.0
。 - 字串 (str): 例如
"Hello"
,'Python'
,"高雄"
。 - 布林值 (bool):
True
或False
。 - 列表 (list): 有序且可變的元素集合,例如
[1, 2, "apple"]
。 - 元組 (tuple): 有序且不可變的元素集合,例如
(1, "banana", 3.0)
。 - 字典 (dict): 鍵值對的集合,例如
{"name": "Alice", "age": 30}
。 - 集合 (set): 無序且不重複的元素集合,例如
{1, 2, 3}
。
您可以使用 type()
函數來查看變數當前的資料型態:

總結:
變數是 Python 中用於儲存和管理資料的基本。了解如何宣告、賦值、命名變數以及 Python 的動態型別特性,是學習 Python 程式設計的基石。透過使用具有描述性的變數名稱,您可以寫出更易讀、更易維護的 Python 程式碼。
全域變數和區域變數
Python 中的全域變數 (Global Variables) 和區域變數 (Local Variables)。理解這兩種變數的作用域 (Scope) 是編寫結構清晰且避免命名衝突的重要概念。
作用域 (Scope)
在程式設計中,作用域指的是變數在程式碼的哪個部分是可被存取和使用的。Python 中變數的作用域主要由其被定義的位置決定。
1. 區域變數 (Local Variables)
- 定義位置: 區域變數是在函數 (function) 內部定義的變數。
- 作用域: 區域變數只能在其被定義的函數內部被存取和使用。當函數執行結束後,區域變數就會被銷毀,外部無法再存取。
- 生命週期: 區域變數的生命週期與其所在的函數的執行週期相同。當函數被呼叫時創建,當函數執行完畢時銷毀。
範例:

在上面的例子中,local_var
只在 my_function
內部有效。當我們嘗試在函數外部存取它時,Python 會拋出 NameError
,因為該變數在那個作用域中不存在。
2. 全域變數 (Global Variables)
- 定義位置: 全域變數是在函數外部(即在模組的頂層)定義的變數。
- 作用域: 全域變數在整個程式中(包括函數內部)都是可以被存取的。
- 生命週期: 全域變數的生命週期與整個程式的執行週期相同。當程式開始執行時創建,當程式結束時銷毀。
範例:

在這個例子中,global_var
在函數 another_function
內部和外部都可以被存取。
在函數內部修改全域變數
預設情況下,當您在函數內部嘗試賦值給一個與全域變數同名的變數時,Python 會將其視為創建一個新的同名區域變數,而不是修改全域變數的值。
範例 (注意輸出):

輸出結果會是:

這是因為 modify_global
函數內部創建了一個新的區域變數 global_var
並賦值為 30,而外部的全域變數 global_var
的值並沒有改變。
使用 global
關鍵字在函數內部修改全域變數
如果您想要在函數內部修改全域變數的值,您需要使用 global
關鍵字來顯式地聲明您正在使用的是全域變數。
範例:

輸出結果會是:

現在,函數內部對 global_var
的賦值確實修改了全域變數的值。
最佳實踐和注意事項:
- 盡量減少使用全域變數: 過度使用全域變數可能會導致程式碼難以理解、追蹤和維護。它們會增加不同部分程式碼之間的耦合性,使得程式的行為更難預測。
- 優先使用區域變數: 區域變數有助於將程式碼邏輯封裝在函數內部,提高程式碼的模組化和可讀性。
- 透過函數參數和返回值傳遞資料: 將資料作為參數傳遞給函數,並使用
return
語句將結果返回,通常是更清晰和更安全的方式來在不同部分的程式碼之間共享資料。 - 命名衝突: 避免使用相同的名稱來命名全域變數和區域變數,以減少混淆和錯誤的可能性。如果必須使用相同的名稱,請務必清楚了解它們的作用域。
總結:
- 區域變數在函數內部定義,只能在函數內部使用,生命週期與函數相同。
- 全域變數在函數外部定義,可以在整個程式中使用,生命週期與程式相同。
- 在函數內部修改全域變數需要使用
global
關鍵字進行聲明。 - 為了程式碼的可維護性和清晰性,建議盡量使用區域變數,並透過函數參數和返回值來傳遞資料。