
SCOPES – Phạm vi biến trong hàm
1. Khái niệm Scope (Phạm vi biến)
Scope là phạm vi mà một biến “tồn tại” và có thể được sử dụng. Có hai loại scope quan trọng: Global Scope và Local Scope.
1.1. Global Scope – Phạm vi toàn cục
- Biến được khai báo ngoài hàm.
- Có thể được truy cập bởi mọi hàm trong file Python.
- Có thể nằm ở file khác nhưng được import.
1.2. Local Scope – Phạm vi cục bộ
- Biến được khai báo bên trong hàm.
- Chỉ tồn tại trong hàm đó.
- Bên ngoài hàm sẽ không nhìn thấy biến này.
2. Ví dụ về Global và Local Variables
Global variables
name_of_units = "minutes"
num_of_units = 24 * 60 # globalLocal variable trong hàm
def days_to_units(number_of_days):
# number_of_days là local variable
return number_of_days * num_of_units3. Minh hoạ lỗi khi truy cập sai scope
Transcript mô tả trường hợp hàm cố gắng dùng biến không thuộc phạm vi của nó.
Ví dụ lỗi:
name_of_units = "minutes"
num_of_units = 1440 # biến toàn cục
def days_to_units(number_of_days):
result = number_of_days * num_of_units
return result
def scope_check():
print(name_of_units) # OK: global variable
print(number_of_days) # ❌ lỗi: không tồn tại trong hàm nàyKết quả khi chạy scope_check():
NameError: name 'number_of_days' is not definedGiải thích:
name_of_units: global → hàm nào cũng nhìn thấy
number_of_days: local củadays_to_units()→ hàmscope_check()không biết nó tồn tại
4. Tạo biến trùng tên nhưng thuộc phạm vi khác nhau
Transcript nói rằng nếu biến local của hàm A không tồn tại trong hàm B, bạn có thể tạo biến cùng tên mà không xung đột.
Ví dụ:
def days_to_units(number_of_days):
result = number_of_days * num_of_units
return result
def scope_check(number_of_days):
# biến local number_of_days này KHÔNG liên quan tới hàm trên
print("Value inside scope_check:", number_of_days)→ Hai biến number_of_days là khác nhau, dù tên giống nhau.
5. Ví dụ đầy đủ theo transcript
Dưới đây là phiên bản “sạch” và hoàn chỉnh dựa trên nội dung bạn cung cấp:
# Global variables
name_of_units = "minutes"
num_of_units = 24 * 60 # 1440
def days_to_units(number_of_days):
# local variable
my_variable_inside_function = "Inside function only"
print(f"Global variable: {name_of_units}")
print(f"Parameter variable: {number_of_days}")
print(f"Internal variable: {my_variable_inside_function}")
result = number_of_days * num_of_units
print(f"{number_of_days} days = {result} {name_of_units}")
def scope_check(value):
print("Accessing global variable:", name_of_units) # OK
print("Parameter value:", value) # OK
# number_of_days không tồn tại trong hàm này
# print(number_of_days) -> sẽ gây lỗi nếu bật dòng nàyGọi thử:
days_to_units(5)
scope_check(20)Output minh hoạ:
Global variable: minutes
Parameter variable: 5
Internal variable: Inside function only
5 days = 7200 minutes
Accessing global variable: minutes
Parameter value: 206. Các điểm quan trọng (Bullet Points)
Global Variables
- Khai báo bên ngoài hàm
- Truy cập được bởi mọi hàm
- Nguy hiểm nếu lạm dụng vì dễ gây lỗi logic
- Dùng khi giá trị mang tính “hằng số” như:
- số phút trong một ngày
- đơn vị chuyển đổi
- cấu hình chương trình
Local Variables
- Tạo bên trong hàm
- Chỉ tồn tại trong phạm vi hàm
- Không thể truy cập từ ngoài
- Tên có thể trùng với biến global mà không ảnh hưởng lẫn nhau
Parameter (tham số) = Local Variable đặc biệt
- Nhận giá trị từ bên ngoài
- Chỉ tồn tại trong hàm
- Mỗi lần gọi hàm, giá trị thay đổi
7. Ví dụ minh họa đơn giản bằng tiếng Việt
Ví dụ minh hoạ phạm vi biến như trong hội thoại đời thường
ten_quoc_gia = "Việt Nam" # biến toàn cục
def gioi_thieu(ten):
tuoi = 20 # biến cục bộ
print(f"Tôi tên {ten}, {tuoi} tuổi, đến từ {ten_quoc_gia}")
def thong_bao():
print(ten_quoc_gia) # OK
# print(tuoi) # ❌ lỗi vì biến tuoi chỉ tồn tại trong hàm gioi_thieu()Tóm tắt nhanh
| Loại biến | Định nghĩa | Tồn tại ở đâu? | Ai truy cập được? |
|---|---|---|---|
| Global | ngoài hàm | toàn chương trình | tất cả hàm |
| Local | trong hàm | chỉ trong hàm đó | chỉ chính hàm đó |
| Parameter | trong hàm (trong dấu ngoặc) | mỗi lần gọi hàm | chỉ trong hàm |
Bài tập thực hành
Bài tập:
Viết hai hàm:
tinh_tong(a, b)- trả về tổng hai số
- khởi tạo thêm 1 biến local trong hàm
kiem_tra_bien()- thử in ra biến local của hàm 1 (để xem lỗi)
- in ra biến global