Trong hướng dẫn này, bạn sẽ tìm hiểu về các biến Toàn cầu trong Python, Biến cục bộ, Biến phi địa phương và nơi sử dụng chúng.
Video: Biến cục bộ và toàn cầu trong Python
Biến toàn cục
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 là một biến toàn cục có thể được truy cập bên trong hoặc bên ngoài hàm.
Hãy xem một ví dụ về cách một biến toàn cục được tạo trong Python.
Ví dụ 1: Tạo một biến toàn cục
x = "global" def foo(): print("x inside:", x) foo() print("x outside:", x)
Đầu ra
x bên trong: toàn cầu x bên ngoài: toàn cầu
Trong đoạn mã trên, chúng ta đã tạo x làm biến toàn cục và định nghĩa a foo()
để in biến toàn cục x. Cuối cùng, chúng tôi gọi foo()
cái sẽ in ra giá trị của x.
Điều gì xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?
x = "global" def foo(): x = x * 2 print(x) foo()
Đầu ra
UnboundLocalError: biến cục bộ 'x' được tham chiếu trước khi gán
Kết quả đầu ra hiển thị lỗi vì Python coi x là một biến cục bộ và x cũng không được xác định bên trong foo()
.
Để làm cho điều này hoạt động, chúng tôi sử dụng global
từ khóa. Truy cập Từ khóa toàn cầu Python để tìm hiểu thêm.
Biến cục bộ
Một biến được khai báo bên trong thân của hàm hoặc trong phạm vi cục bộ được gọi là biến cục bộ.
Ví dụ 2: Truy cập biến cục bộ bên ngoài phạm vi
def foo(): y = "local" foo() print(y)
Đầu ra
NameError: tên 'y' không được xác định
Đầu ra hiển thị lỗi vì chúng tôi đang cố gắng truy cập một biến cục bộ y trong phạm vi toàn cục trong khi biến cục bộ chỉ hoạt động bên trong foo()
hoặc phạm vi cục bộ.
Hãy xem một ví dụ về cách một biến cục bộ được tạo trong Python.
Ví dụ 3: Tạo một biến cục bộ
Thông thường, chúng ta khai báo một biến bên trong hàm để tạo một biến cục bộ.
def foo(): y = "local" print(y) foo()
Đầu ra
địa phương
Hãy xem xét vấn đề trước đó, trong đó x là một biến toàn cục và chúng ta muốn sửa đổi x bên trong foo()
.
Biến cục bộ và toàn cục
Ở đây, chúng tôi sẽ trình bày cách sử dụng biến toàn cục và biến cục bộ trong cùng một đoạn mã.
Ví dụ 4: Sử dụng các biến Toàn cục và Cục bộ trong cùng một mã
x = "global " def foo(): global x y = "local" x = x * 2 print(x) print(y) foo()
Đầu ra
địa phương toàn cầu toàn cầu
Trong đoạn mã trên, chúng ta khai báo x là toàn cục và y là biến cục bộ trong foo()
. Sau đó, chúng tôi sử dụng toán tử nhân *
để sửa đổi biến tổng thể x và chúng tôi in ra cả x và y.
Sau khi gọi hàm foo()
, giá trị của x trở thành global global
vì chúng ta đã sử dụng dấu x * 2
để in hai lần global
. Sau đó, chúng ta in giá trị của biến cục bộ y tức là local
.
Ví dụ 5: Biến toàn cục và biến cục bộ có cùng tên
x = 5 def foo(): x = 10 print("local x:", x) foo() print("global x:", x)
Đầu ra
cục bộ x: 10 toàn cầu x: 5
Trong đoạn mã trên, chúng tôi đã sử dụng cùng một tên x cho cả biến toàn cục và biến cục bộ. Chúng ta nhận được một kết quả khác khi chúng ta in cùng một biến vì biến được khai báo trong cả hai phạm vi, tức là phạm vi cục bộ bên trong foo()
và phạm vi toàn cục bên ngoài foo()
.
When we print the variable inside foo()
it outputs local x: 10
. This is called the local scope of the variable.
Similarly, when we print the variable outside the foo()
, it outputs global x: 5. This is called the global scope of the variable.
Nonlocal Variables
Nonlocal variables are used in nested functions whose local scope is not defined. This means that the variable can be neither in the local nor the global scope.
Let's see an example of how a nonlocal variable is used in Python.
We use nonlocal
keywords to create nonlocal variables.
Example 6: Create a nonlocal variable
def outer(): x = "local" def inner(): nonlocal x x = "nonlocal" print("inner:", x) inner() print("outer:", x) outer()
Output
inner: nonlocal outer: nonlocal
Trong đoạn mã trên, có một inner()
hàm lồng nhau . Chúng tôi sử dụng nonlocal
từ khóa để tạo biến phi địa phương. Các inner()
chức năng được xác định trong phạm vi chức năng khác outer()
.
Lưu ý : Nếu chúng ta thay đổi giá trị của một biến phi địa phương, những thay đổi sẽ xuất hiện trong biến cục bộ.