Tin học 10 · SGK
Bài 28. Phạm vi của biến
SAU BÀI NÀY EM SẼ:
Bài này sẽ giúp em tìm câu trả lời cho các câu hỏi trên.
1. PHẠM VI CỦA BIẾN KHAI BÁO TRONG HÀM
Hoạt động 1: Phạm vi của biến khi khai báo trong hàm
Quan sát các lệnh sau để tìm hiểu phạm vi có hiệu lực của biến khi khai báo bên trong một hàm.
Các biến được khai báo bên trong một hàm chỉ được sử dụng bên trong hàm đó.
def func(a,b):
t = a*2
return t
a và b được gán: a = 1, b = 2
>>> func(a,b)
16
a, b = (1, 2) vẫn không thay đổi.
Traceback (most recent call last)
File "<pyshell#11>", line 1, in <module>
NameError: name 't' is not defined
Biến t chỉ có tác dụng bên trong hàm func; gọi bên ngoài hàm này là không được.
Trong Python tất cả các biến khai báo bên trong hàm đều có tính địa phương (cục bộ), không có hiệu lực ở bên ngoài hàm.
[[CODE]]
1. Giả sử có các lệnh sau:
>>> a, b = 1, 2
>>> def f(a, b):
return b*a
Giá trị của a, b bằng bao nhiêu sau khi thực hiện lệnh sau?
a) f(1, 2)
b) f(10, 20)
[[H1]] 2. PHẠM VI CỦA BIẾN KHAI BÁO NGOÀI HÀM
[[H1]] Hoạt động 2: Phạm vi của biến khi khai báo bên ngoài hàm
Quan sát các lệnh sau, tìm hiểu phạm vi có hiệu lực của biến khi khai báo bên ngoài một hàm.
Ví dụ 1. Biến khai báo bên ngoài hàm không có tác dụng bên trong hàm
[[CODE]]
def f():
t = t + 1
return t
Trong chương trình chính biến t được khai báo bên ngoài hàm
>>> t = 10
>>> f(5)
Trị 6. Nhưng khi thoát khỏi f(), t vẫn có giá trị 10. Do vậy biến t không có tác dụng bên trong hàm f().
>>> t
10
Ví dụ 2. Bên trong hàm có thể truy cập để sử dụng giá trị của biến đã khai báo trước đó ở bên ngoài hàm
[[CODE]]
>>> def f(a, b):
return a + b + N
N = 10 có giá trị 10. Khi gọi hàm f(1,2) giá trị trả lại là biểu thức có N tham gia. Vậy trong hàm f() được phép truy cập giá trị của biến N.
>>> f(1,2)
13
Lưu ý: Nếu muốn biến bên ngoài vẫn có tác dụng bên trong hàm thì cần khai báo lại biến này bên trong hàm với từ khoá global
[[CODE]]
>>> def f(n):
global t
t = 2*n
return t
Biến t được khai báo với từ khoá global. Biến t khai báo trong chương trình chính và được gán giá trị 10.
>>> t = 10
>>> f(1)
Sau khi thực hiện f(1), giá trị t đã thay đổi.
>>> t
Biến đã khai báo bên ngoài sẽ không có tác dụng bên trong hàm như một biến. Nếu muốn có tác dụng thì cần khai báo lại biến này trong hàm với từ khoá global.
[[CODE]]
Giả sử hàm f(x, y) được định nghĩa như sau:
>>> def f(x, y):
return 2*(x - y)
Kết quả nào được in ra khi thực hiện các lệnh sau?
a = 10
f(1,2)
[[H1]] THỰC HÀNH
Phạm vi của biến
Nhiệm vụ 1. Viết hàm với đầu vào là danh sách A chứa các số và số thực x. Hàm trả lại một danh sách kết quả B từ danh sách A bằng cách chỉ giữ lại các phần tử lớn hơn hoặc bằng x.
Hướng dẫn. Biến B kiểu danh sách cần được định nghĩa trong hàm và được bổ sung thêm các phần tử từ A nếu thoả mãn điều kiện lớn hơn hoặc bằng x.
[[CODE]]
def Select(A, x):
B = []
for k in range(len(A)):
if A[k] >= x:
B.append(A[k])
return B
Nhiệm vụ 2. Viết hàm với đầu vào là xâu kí tự Str và số c, đầu ra là danh sách các từ được tách ra từ xâu Str nhưng đã được chuyển thành chữ in hoa hoặc chữ in thường, hoặc chỉ kí tự đầu các từ thành chữ in hoa tuỳ thuộc vào tham số đầu vào c như sau:
Hướng dẫn. Chúng ta cần sử dụng các lệnh sau:
Str.upper() chuyển các kí tự của xâu thành chữ in hoa.
Str.lower() chuyển các kí tự của xâu thành chữ in thường.
Str.title() chuyển kí tự đầu mỗi từ của xâu thành chữ in hoa, các kí tự khác về chữ thường.
Hàm được định nghĩa có dạng Tach_tu(Str, c). Đầu tiên xâu Str cần được tách bằng lệnh split(). Sau đó danh sách kết quả sẽ được chuyển đổi chữ in hoa, in thường sử dụng một trong các lệnh trên tuỳ thuộc vào giá trị của đối số c.
[[CODE]]
def Tach_tu(Str, c):
A = Str.split()
for k in range(len(A)):
if c == 0:
A[k] = A[k].upper()
if c == 1:
A[k] = A[k].lower()
if c == 2:
A[k] = A[k].title()
return A
Nhiệm vụ 3. Viết chương trình yêu cầu thực hiện lần lượt các việc sau; mỗi việc cần được thực hiện bởi một hàm:
Hướng dẫn. Với mỗi việc trên được viết thành một hàm. Toàn bộ chương trình có thể như sau:
[[CODE]]
def Nhap_Dulieu():
A = input("Nhập các số nguyên cách nhau bởi dấu cách: ").split()
for k in range(len(A)):
A[k] = int(A[k])
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)
[[H1]] LUYỆN TẬP
[[H1]] VẬN DỤNG