Sau Bài Này Em Sẽ
- Hiểu được khái niệm phạm vi của biến trong chương trình.
- Phân biệt được biến cục bộ (Local Variable) và biến toàn cục (Global Variable).
- Biết sử dụng từ khóa global khi cần thay đổi giá trị của biến toàn cục trong hàm.
MỞ ĐẦU
Trong khi lập trình, chúng ta thường khai báo các biến để lưu trữ dữ liệu. Tuy nhiên, không phải biến nào cũng có thể sử dụng ở mọi nơi trong chương trình.
Câu hỏi 1: Một biến được khai báo ngoài hàm thì sử dụng trong hàm như thế nào?
Biến khai báo ngoài hàm gọi là biến toàn cục. Nếu trong hàm không có biến cùng tên thì hàm có thể sử dụng giá trị của biến đó.
def tong(a, b):
return a + b + N
print(tong(1, 2))
-
N = 10là biến toàn cục (global variable). -
Trong hàm
tong(a, b), biếnNđược sử dụng trực tiếp vì không có biếnNcục bộ nào cùng tên. -
Hàm trả về:
Với lời gọi: tong(1, 2) = 13
Câu hỏi 2: Biến khai báo trong hàm có dùng được ngoài hàm không?
Không. Biến khai báo trong hàm chỉ có hiệu lực trong chính hàm đó.
x = 5
print(x)
-
x = 5là biến cục bộ (local variable), chỉ tồn tại bên trong hàmdemo(). -
print(x)sẽ in giá trị củax.
def demo(): x = 5 print(x) demo()
Kết quả: 5
1. Phạm Vi Của Biến Khai Báo Trong Hàm
Hoạt động 1: Tìm hiểu phạm vi của biến được khai báo trong hàm
n = 10
a = a * 2
b = a + b
return a + b + n
a = 1
b = 2
print(func(a, b))
print(a, b)
print(n)
-
Ban đầu:
-
a = 1 -
b = 2
-
-
Khi gọi
func(a, b):-
n = 10(biến cục bộ) -
a = a * 2→a = 2 -
b = a + b→b = 2 + 2 = 4 -
return a + b + n = 2 + 4 + 10 = 16
-
Vì vậy:
print(func(a, b))
In ra: 16
Sau khi hàm kết thúc, các biến a và b bên ngoài không thay đổi vì Python truyền tham số theo tham chiếu đến đối tượng, nhưng việc gán lại a và b trong hàm chỉ ảnh hưởng đến biến cục bộ.
print(a, b)
In ra: 1 2
Cuối cùng:
print(n)
Sẽ gây lỗi:
NameError: name 'n' is not defined
vì n là biến cục bộ, chỉ tồn tại bên trong hàm func().
Trong hàm có ba biến a, b, n — đều là biến cục bộ. Sau khi hàm kết thúc, biến n bị hủy; a, b trong hàm cũng không còn. Hai biến a=1, b=2 ở chương trình chính vẫn giữ nguyên.
Ghi nhớ: Biến được khai báo trong hàm gọi là biến cục bộ (Local Variable). Biến cục bộ chỉ có hiệu lực trong hàm chứa nó.
✔ Biến cục bộ chỉ tồn tại trong hàm. ✔ Có thể trùng tên với biến toàn cục. ✔ Khi hàm kết thúc, biến cục bộ bị hủy.
2. Phạm Vi Của Biến Khai Báo Ngoài Hàm
Biến khai báo ở chương trình chính gọi là biến toàn cục. Hãy quan sát các ví dụ sau.
Ví dụ 1: Biến cục bộ và toàn cục cùng tên
t = n + 1
return t
t = 10
print(f(5))
print(t)
Giải thích ngắn gọn:
-
Trong hàm:
t = 5 + 1 = 6→ trả về6. -
Biến
ttrong hàm là biến cục bộ, không ảnh hưởng đếnt = 10bên ngoài.
Ví dụ 2: Sử dụng biến toàn cục trong hàm
return a + b + N
N = 10
print(f(1, 2))
N là biến toàn cục, nên f(1, 2) = 1 + 2 + 10 = 13.Ví dụ 3: Dùng từ khóa global để thay đổi biến toàn cục
global t
t = 2 * n + 1
return t
t = 10
print(f(1))
print(t)
global t làm thay đổi biến toàn cục t, nên sau khi gọi f(1), giá trị của t là 3.Ghi nhớ: Biến toàn cục có thể được đọc trong hàm. Muốn thay đổi giá trị của biến toàn cục trong hàm phải khai báo bằng từ khóa global.
✔ Biến toàn cục có thể đọc trong hàm. ✔ Muốn thay đổi phải dùng global. ✔ Không nên lạm dụng biến toàn cục.
THỰC HÀNH
Nhiệm vụ 1: Hàm Select(A, x)
Viết hàm trả về danh sách B gồm các phần tử của A có giá trị ≥ x.
B = []
for i in range(len(A)):
if A[i] >= x:
B.append(A[i])
return B
A = [12, 5, 18, 3, 20, 7, 15]
print(Select(A, 10))
Select(A, x) trả về danh sách gồm các phần tử trong A có giá trị lớn hơn hoặc bằng x. Với x = 10, các phần tử thỏa mãn là 12, 18, 20, 15.Nhiệm vụ 2: Hàm Tach_tu(Str, c)
Tách xâu thành danh sách từ. c=0: in hoa, c=1: in thường, c=2: viết hoa chữ đầu.
A = Str.split()
for i in range(len(A)):
if c == 0:
A[i] = A[i].upper()
elif c == 1:
A[i] = A[i].lower()
elif c == 2:
A[i] = A[i].title()
return A
s = "hoc lap trinh python"
print(Tach_tu(s, 0))
print(Tach_tu(s, 1))
print(Tach_tu(s, 2))
Giải thích ngắn gọn:
-
c = 0: Chuyển tất cả từ thành chữ hoa (upper()). -
c = 1: Chuyển tất cả từ thành chữ thường (lower()). -
c = 2: Viết hoa chữ cái đầu của mỗi từ (title()).
Nhiệm vụ 3: Chia chương trình thành hàm
Nhập dãy số, tạo danh sách số dương (B) và số âm (C). Mỗi công việc viết thành một hàm riêng.
s = input("Nhập các số: ")
A = s.split()
for i in range(len(A)):
A[i] = int(A[i])
return A
def getB(A):
B = []
for x in A:
if x > 0:
B.append(x)
return B
def getC(A):
C = []
for x in A:
if x < 0:
C.append(x)
return C
A = Nhap_DuLieu()
print("Danh sách A:", A)
B = getB(A)
C = getC(A)
print("Danh sách B:", B)
print("Danh sách C:", C)
Danh sách B: [12, 18, 4]
Danh sách C: [-5, -9, -2]
Giải thích ngắn gọn:
-
Nhap_DuLieu(): Nhập dãy số và chuyển thành danh sách số nguyên. -
getB(A): Lấy các số dương (> 0). -
getC(A): Lấy các số âm (< 0). -
Số
0không thuộc danh sáchBhayC.
LUYỆN TẬP
VẬN DỤNG
TỔNG KẾT KIẾN THỨC
Biến cục bộ (Local Variable)
- Khai báo trong hàm
- Chỉ dùng trong hàm
- Bị hủy sau khi hàm kết thúc
- Không ảnh hưởng biến ngoài hàm
Biến toàn cục (Global Variable)
- Khai báo ngoài hàm
- Có thể đọc trong các hàm
- Tồn tại suốt chương trình
- Muốn thay đổi trong hàm phải dùng
global
def tang():
global x
x = x + 1
tang()
print(x)
global x cho phép hàm tang() thay đổi biến toàn cục x. Ban đầu x = 10, sau khi gọi tang(), x tăng lên 11.Phạm vi của biến quyết định nơi biến có thể được sử dụng. Nên hạn chế biến toàn cục; ưu tiên truyền dữ liệu qua tham số và giá trị trả về để chương trình rõ ràng, dễ bảo trì.
D. TRẮC NGHIỆM
.png)