Bài 17 - Từ Khóa global Trong Python
Bài 17 - Từ Khóa global Trong Python
Mục tiêu: Hiểu rõ cách sử dụng từ khóa global
để quản lý biến toàn cục trong hàm.
1. Giới Thiệu
- Vấn đề: Khi một biến toàn cục (global) được khai báo bên ngoài hàm, bạn không thể thay đổi giá trị của nó trực tiếp bên trong hàm.
- Giải pháp: Từ khóa
global
cho phép hàm:- Truy cập biến toàn cục
- Sửa đổi giá trị của biến toàn cục
2. Khi Nào Cần Dùng global
?
Scenario | Cần global ? | Ví dụ |
---|---|---|
Chỉ đọc giá trị biến global | ❌ Không | print(x) |
Gán lại giá trị biến global | ✅ Có | x = new_value |
Thay đổi object mutable (list, dict) | ❌ Không (*) | list.append(1) |
(*) Với mutable objects, bạn có thể thay đổi nội dung mà không cần
global
, nhưng không thể gán lại cả biến.
3. Cú Pháp Cơ Bản
global variable_name # Khai báo ở đầu hàm
Ví dụ minh họa:
counter = 0 # Biến toàn cục def increment(): global counter # Khai báo sử dụng biến toàn cục counter += 1 increment() print(counter) # Output: 1
4. So Sánh Không/Có global
Tình huống 1: Không dùng global
→ Tạo biến local mới
x = 10 def func(): x = 20 # Tạo biến local x, KHÔNG ảnh hưởng global x func() print(x) # Output: 10 (giá trị global không đổi)
Tình huống 2: Dùng global
→ Thay đổi biến toàn cục
x = 10 def func(): global x x = 20 # Sửa biến global x func() print(x) # Output: 20 (giá trị global đã thay đổi)
5. Lưu ý Quan Trọng
Khai báo trước khi gán: Luôn đặt
global
ở đầu hàm, trước mọi thao tác với biến.def valid(): global x x = 10 # Đúng def invalid(): x = 10 global x # Lỗi: SyntaxError
Biến chưa tồn tại:
global
có thể tạo biến mới trong global scope nếu chưa có:def create_global(): global new_var new_var = 100 # Tạo biến global mới create_global() print(new_var) # Output: 100
- Tránh lạm dụng:
- Sử dụng quá nhiều biến global → code khó debug, dễ gây xung đột
- Ưu tiên truyền tham số và trả về giá trị thay vì dùng
global
6. Bài Tập Thực Hành
Câu 1: Đoán output
total = 0 def calculate(): global total total = 15 partial = 5 # Biến local calculate() print(total) # Output: ? print(partial) # Output: ?
<details> <summary>Đáp án</summary> total = 15 (global được sửa)<br> partial → Lỗi NameError (biến local không tồn tại bên ngoài hàm) </details>
Câu 2: Sửa lỗi
balance = 100 def withdraw(amount): balance = balance - amount # Lỗi! withdraw(20)
Sửa
balance = 100 def withdraw(amount): global balance balance = balance - amount # Đúng withdraw(20) print(balance) # Output: 80
7. Tài Nguyên Học Tập
Chúc bạn làm chủ từ khóa global
!