DANH MỤC TÀI LIỆU
Biến toàn cục, biến cục bộ, biến nonlocal trong Python
Bi n toàn c c (global), bi n c c b (local), bi n nonlocal trong Pythonế ế ụ ộ ế
Trong bài Python này b n s h c v bi n ế toàn c c (global), bi n c c b ế ụ ộ
(local), bi n nonlocal trong Python và tr ng h p s d ng các bi n này.ế ườ ử ụ ế
Bi n toàn c c trong Pythonế ụ
Trong ngôn ng l p trình Python, m t bi n đ c khai báo bên ngoài hàm ữ ậ ế ượ
ho c trong ph m vi toàn c c đ c g i là bi n toàn c c hay bi n global. ụ ượ ọ ế ế
Bi n toàn c c có th đ c truy c p t bên trong ho c bên ngoài hàm.ế ể ượ
Hãy xem ví d v cách t o bi n toàn c c trong Python.ụ ề ế
x = "Bi n toàn c c"ế #khai báo bi nế x
#G i x t trong hàm vidu()ọ ừ
def vidu():
print("x trong hàm vidu() :", x)
vidu()
#G i x ngoài hàm vidu()
print("x ngoài hàm vidu():", x)
Trong ví d trên, ta khai báo bi n x là bi n toàn c c, và đ nh nghĩa ế ế ụ ị
hàm vidu() đ in bi n x. Cu i cùng ta g i hàmể ế vidu() đ in giá tr c a ị ủ
bi nế x. Ch y code trên ta s đ c k t qu là: ẽ ượ ế
x trong hàm vidu(): Bi n toàn c cế ụ
x ngoài hàm vidu(): Bi n toàn c cế ụ
Chuy n gì s x y ra n u b n thay đ i giá tr c a x trong hàm? ế ị ủ
x = 2
def vidu():
x=x*2
print(x)
vidu()
N u ch y code này b n s nh n đ c thông báo l i:ế ạ ẽ ượ
UnboundLocalError: local variable 'x' referenced before assignment
L i này xu t hi n là do Python x x nh m t bi n c c b ư ộ ế x không
đ c đ nh nghĩa trongượ ị vidu().
Đ thay đ i bi n toàn c c trong m t hàm b n s ph i s d ng ế ử ụ t khóa
global. Chúng tôi s nói k h n trong bài v ỹ ơ t khóa global.
Bi n c c b trong Pythonế ụ ộ
Bi n đ c khai báo bên trong m t hàm ho c trong ph m vi c c b đ c ế ượ ộ ượ
g i là bi n c c b hay bi n local. ế ụ ộ ế
def vidu():
y = "Bi n c c b "ế ụ ộ
vidu()
print(y)
Khi ch y code trên b n s nh n đ c thông báo l i: ạ ẽ ượ
NameError: name 'y' is not defined
L i này xu t hi n là do chúng ta đã c truy c p vào bi n c c b y trong ế ụ ộ
ph m vi toàn c c, nh ng y ch làm vi c trong hàm ụ ư vidu() ho c ph m vi c cặ ạ
b .
Thông th ng, đ t o m t bi n c c b , chúng ta s khai báo nó trong m t ườ ể ạ ế
hàm nh ví d d i đây:ư ụ ướ
def vidu():
y = "Bi n c c b "ế ụ ộ
print(y)
vidu()
Ch y code trên ta s đ c k t qu ẽ ượ ế
Bi n c c bế ụ ộ
Chúng ta quay tr l i xem xét v n đ tr c đó, lúcở ạ ướ x là m t bi n toàn c c ộ ế
và chúng ta mu n thay đ i x trong vidu().
Bi n c c b và bi n toàn c cế ụ ộ ế
đây, chúng ta s h c cách dùng bi n c c b và toàn c c trong cùng m t ẽ ọ ế
code.
x = 2
def vidu():
global x
y = "Bi n c c b "ế ụ ộ
x = x * 2
print(x)
print(y)
#Vi t b i Quantrimang.com ế ở
vidu()
Ch y code trên ta s có đ u ra: ẽ ầ
4
Bi n c c bế ụ ộ
Trong code trên, chúng ta khai báo x bi n toàn c c vàế y là bi n c c b ế ụ ộ
trong vidu() và dùng toán t * đ thay đ i bi n toàn c c và in c giá tr c a ế ị ủ
x và y. Sau khi g i hàm vidu() giá tr c a x s thành 4 vì đ c nhân đôi.ị ủ ượ
Ví d s d ng bi n toàn c c và c c b trùng tên:ụ ử ế
x = 5
def vidu():
x = 10
print("Bi n x c c b :"ế , x)
vidu()
print("Bi n x toàn c c:"ế , x)
Sau khi ch y code trên ta có đ u ra:ạ ầ
Bi n x c c b : ế 10
Bi n x toàn c c: ế 5
Trong code trên, chúng ta s d ng cùng tên x cho c bi n c c b và bi n ử ụ ế ế
toàn c c. Khi in cùng bi n x chúng ta nh n đ c hai k t qu khác nhau vì ế ậ ượ ế
bi n đ c khai báo c hai ph m vi, c c b (bên trong hàmế ượ ở ả vidu()) và toàn
c c (bên ngoài hàm vidu()).
Khi chúng ta in bi n trong hàmế vidu() nó s xu t raẽ ấ Bi n x c c b : 10ế ụ ộ , đây
đ c g i là ph m vi c c b c a bi n. T ng t khi ta in bi n bên ngoài ượ ộ ủ ế ươ ế
hàm vidu() s cho ra Bi n x toàn c c: 5ế , đây là ph m vi toàn c c c a bi n. ụ ủ ế
Bi n nonlocal trong Pythonế
T nonlocal này mình không bi t d ch sang ti ng Vi t sao cho chu n. Trong ế ị ế
Python, bi n nonlocal đ c s d ng trong hàm l ng nhau n i mà ph m vi ế ượ ử ụ ơ
c c b không đ c đ nh nghĩa. Nói d hi u thì bi n nonlocal không ph i ượ ễ ể ế
bi n local, không ph i bi n global, b n khai báo m t bi n là nonlocal khi ế ả ế ộ ế
mu n s d ng nó ph m vi r ng h n local, nh ng ch a đ n m c global. ử ụ ơ ư ư ế
Đ khai báo bi n nonlocal ta c n dùng đ n t khóa nonlocal. ế ế ừ
Ví d :
def ham_ngoai():
x = "Bi n c c b "ế ụ ộ
def ham_trong():
nonlocal x
x = "Bi n nonlocal"ế
print("Bên trong:", x)
ham_trong()
print("Bên ngoài:", x)
hamngoai()
Ch y code trên b n s có đ u ra: ạ ẽ
Bên trong: Bi n ếnonlocal
Bên ngoài: Bi n ếnonlocal
Trong code trên có m t hàm l ng là ham_trong(), ta dùng t
khóa nonlocal đ t o bi n nonlocal. Hàmể ạ ế ham_trong() đ c đ nh nghĩa ượ ị
trong ph m vi c a ham_ngoai().
L u ý: N u chúng ta thay đ i giá tr c a bi n nonlocal, s thay đ i s xu t ư ế ị ủ ế
hi n trong bi n c c b . ế ụ ộ
thông tin tài liệu
Trong bài Python này bạn sẽ học về biến toàn cục (global), biến cục bộ (local), biến nonlocal trong Python và trường hợp sử dụng các biến này
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×