Bài này sẽ giải thích một chút về biến toàn cục và biến cục bộ trong Python để bạn hiểu phạm vi hoạt động của chúng, tránh được những lỗi ngớ ngẩn không hiểu tại sao có khai báo biến mà vẫn bị lỗi.

1. Biến toàn cục là gì?

Trong 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. Điều này có nghĩa, biến toàn cục có thể được truy cập bên trong hoặc bên ngoài hàm.

Biến toàn cục có tên gọi là Global Variable.

Hãy xem một ví dụ về cách tạo một biến toàn cục trong Python.

Global Variable
1
2
3
4
5
6
7
x = "global"
def foo():
    print("x inside :", x)
foo()
print("x outside:", x)

Khi chạy chương trình này thì kết quả sẽ như sau:

1
2
x inside : global
x outside: global

Trong đoạn code trên thì biến x là biến toàn cục bởi nó được khai báo bên ngoài hàm, nằm tại vị trí cấp cao nhất của ứng dụng.  Giống như Javascript, trong hàm có thể sử dụng biến cục bộ mà không cần phải thông qua việc truyền tham số.

Chuyện gì sảy ra nếu bạn cố tình thay đổi giá trị của x bên trong hàm foo()?

1
2
3
4
5
6
x = "global"
def foo():
    x = x * 2
    print(x)
foo()

Khi chạy chương trình thì sẽ bị lỗi như sau:

1
UnboundLocalError: local variable 'x' referenced before assignment

Lý do tại sao? Tại vì bên trong hàm foo() bạn đã thay đổi giá trị cho biến x nên mặc nhiên nó sẽ hiểu biến x là biến cục bổ, mà biến cục bộ thì đoạn code x = x * 2 sẽ sai vì biến x chưa được khai báo.

2. Biến cục bộ là gì?

Trong Python biến cục bộ được hiểu là biến được khai báo bên trong hàm hoặc phạm vi cục bộ, những biến này gọi là biến cục bộ.

Biến cục bộ có tên gọi là Local Variable.

Hãy xem ví dụ dưới đây:

1
2
3
4
5
def foo():
    y = "local"
foo()
print(y)

Do biến y là biến cục bộ nằm bên trong hàm foo() nên đoạn codeprint(y) là sai, bạn không thể sử dụng biến cục bộ ở bên ngoài hàm được.

Chạy lên kết quả sẽ như sau:

1
NameError: name 'y' is not defined

3. Từ khóa global

Để tường minh trong việc sử dụng biến cục bộ ở trong hàm thì Python cung cấp từ khóa global, khi khai báo từ khóa nào cho một biến bất kì thì trình biên dịch sẽ tự hiểu biến đó sẽ trỏ tới một biến cục bộ nằm bên ngoài hàm.

Ví dụ: Sử dụng từ khóa global

1
2
3
4
5
6
7
8
9
10
x = "global"
def foo():
    global x
    y = "local"
    x = x * 2
    print(x)
    print(y)
    
foo()

Chạy lên kết quả sẽ như sau:

1
2
global global
local

Nếu ở ví dụ ở phần 1 bị sai vì ta đã thay đổi giá trị cho biến x thì trong ví dụ này lại đúng, tại sao? Tại vì ta đã sử dụng từ khóa global để trỏ đến biến cục bộ bên ngoài.

4. Lời kết

Khó khăn nhất là việc khai báo trùng tên ở biến toàn cục và biến cục bộ, vì vậy lời khuyên bạn nên sử dụng biến một cách khoa học, khai báo bằng tham số truyền vào nếu muốn sử dụng biến toàn cục ở bên trong hàm.

Như vậy là mình đã giới thiệu xong khái niệm về biến cục bộ và biến toàn cục trong Python, hy vọng bạn sẽ hiểu ý nghĩa của từng loại biến để sử dụng cho đúng mục đích.

Nguồn:https://freetuts.net

 

 

Được quan tâm nhiều nhất

  • Apple Watch Series 5 Teardown - Always on Display Explained

  • iPhone 11 Pro Max Teardown - Tiny Motherboard & BIG Battery!

  • Apple Watch Series 4 Teardown

Bạn thấy bài viết này thế nào?
Thể hiện yêu thương tác giả ở đây nhé!

Thích bài viết

thích

Chia sẻ ngay!

phuongle

Thành viên từ: 10/12/2019

Điểm uy tín: 7,891

SMod: 1,288 hướng dẫn đã chia sẻ

Team

Lập Trình Thành viên của Lập Trình

1 Thành viên

1,288 bài viết

Thêm bình luận

Bình luận bằng tài khoản Facebook

Tìm người tài chia sẽ giúp đỡ cộng đồng!

Tham gia ngay Đóng
Amharic Amharic Arabic Arabic Bengali Bengali Chinese (Simplified) Chinese (Simplified) Chinese (Traditional) Chinese (Traditional) English English Filipino Filipino French French German German Hausa Hausa Hindi Hindi Indonesian Indonesian Italian Italian Japanese Japanese Korean Korean Persian Persian Portuguese Portuguese Russian Russian Serbian Serbian Spanish Spanish Thai Thai Turkish Turkish Urdu Urdu Vietnamese Vietnamese