Thông tin tổng quan về Python Global Keyword cho newbie
20/10/2022 02:28
Trong bài viết này, bạn sẽ tìm hiểu về từ khóa global, biến toàn cục và khi nào sử dụng từ khóa global. Trước khi đọc bài viết này, hãy đảm bảo rằng bạn đã nắm được một số kiến thức cơ bản về Python Global, Local và Nonlocal Variables .
Từ khóa global Python
Từ khóa global là gì
Trong Python, global
từ khóa cho phép bạn sửa đổi biến bên ngoài phạm vi hiện tại. Nó được sử dụng để tạo một biến toàn cục và thực hiện các thay đổi đối với biến đó trong ngữ cảnh cục bộ.
Quy tắc của Từ khóa global
Các quy tắc cơ bản cho global
từ khóa trong Python là:
- Khi chúng ta tạo một biến bên trong một hàm, nó sẽ là cục bộ theo mặc định.
- Khi chúng ta xác định một biến bên ngoài một hàm, nó là toàn cục theo mặc định. Bạn không cần phải sử dụng
global
từ khóa. - Chúng tôi sử dụng
global
từ khóa để đọc và ghi một biến toàn cục bên trong một hàm. - Việc sử dụng
global
từ khóa bên ngoài một chức năng không có tác dụng.
Sử dụng từ khóa global
Hãy lấy một ví dụ.
Ví dụ 1: Truy cập biến toàn cục từ bên trong một hàm
c = 1 # global variable
def add():
print(c)
add()
Khi chúng ta chạy chương trình trên, kết quả đầu ra sẽ là:
1
Tuy nhiên, chúng ta có thể gặp một số trường hợp cần sửa đổi biến toàn cục từ bên trong một hàm.
Ví dụ 2: Sửa đổi biến toàn cục từ bên trong hàm
c = 1 # global variable
def add():
c = c + 2 # increment c by 2
print(c)
add()
hi chúng tôi chạy chương trình trên, đầu ra hiển thị lỗi:
UnboundLocalError: biến cục bộ 'c' được tham chiếu trước khi gán
Điều này là do chúng ta chỉ có thể truy cập biến toàn cục nhưng không thể sửa đổi nó từ bên trong hàm.
Giải pháp cho điều này là sử dụng global
từ khóa.
Ví dụ 3: Thay đổi biến toàn cục từ bên trong một hàm bằng cách sử dụng toàn cục
c = 0 # global variable def add(): global c c = c + 2 # increment by 2 print("Inside add():", c) add() print("In main:", c)
Khi chúng ta chạy chương trình trên, kết quả đầu ra sẽ là:
Inside add(): 2
In main: 2
Trong chương trình trên, chúng tôi xác địnhcnhư một từ khóa toàn cục bên trong add()
hàm.
Sau đó, chúng tôi tăng biếncbằng 2 , tức là c = c + 2
. Sau đó, chúng ta gọi add()
hàm. Cuối cùng, chúng tôi in biến toàn cụcc.
Như chúng ta có thể thấy, thay đổi cũng xảy ra trên biến toàn cục bên ngoài hàm c = 2
,.
Các biến global trên các mô-đun Python
Trong Python, chúng tôi tạo một mô-đun duy nhất config.py
để chứa các biến toàn cục và chia sẻ thông tin giữa các mô-đun Python trong cùng một chương trình.
Đây là cách chúng tôi có thể chia sẻ các biến toàn cục trên các mô-đun python.
Ví dụ 4: Chia sẻ một biến global qua các mô-đun Python
Tạo một config.py
tệp, để lưu trữ các biến toàn cục
a = 0
b = "empty"
Tạo một update.py
tệp, để thay đổi các biến toàn cục
import config
config.a = 10
config.b = "alphabet"
Tạo một main.py
tệp để kiểm tra các thay đổi về giá trị
import config
import update
print(config.a)
print(config.b)
Khi chúng tôi chạy main.py
tệp, đầu ra sẽ là
10 bảng chữ cái
Ở trên, chúng tôi đã tạo ba tệp config.py
:, update.py
và main.py
.
Mô-đun config.py
lưu trữ các biến toàn cục củamộtvàb. Trong update.py
tệp, chúng tôi nhập config.py
mô-đun và sửa đổi các giá trị củamộtvàb. Tương tự, trong main.py
tệp, chúng tôi nhập cả hai config.py
và update.py
mô-đun. Cuối cùng, chúng tôi in và kiểm tra các giá trị của các biến toàn cục xem chúng có bị thay đổi hay không.
global trong các hàm lồng nhau
Đây là cách bạn có thể sử dụng một biến toàn cục trong hàm lồng nhau.
Ví dụ 5: Sử dụng một biến toàn cục trong hàm lồng nhau
def foo():
x = 20
def bar():
global x
x = 25
print("Before calling bar: ", x)
print("Calling bar now")
bar()
print("After calling bar: ", x)
foo()
print("x in main: ", x)
Out put
Before calling bar: 20
Calling bar now
After calling bar: 20
x in main: 25
Trong chương trình trên, chúng ta đã khai báo một biến toàn cục bên trong hàm lồng nhau bar()
. Chức năng bên trong foo()
,xkhông có ảnh hưởng của từ khóa global.
Trước và sau khi gọi bar()
, biếnxlấy giá trị của biến cục bộ tức là x = 20
. Ngoài foo()
hàm, biếnxsẽ nhận giá trị được xác định trong bar()
hàm tức là x = 25
. Điều này là do chúng tôi đã sử dụng global
từ khóa trongxđể tạo biến toàn cục bên trong bar()
hàm (phạm vi cục bộ).
Nếu chúng tôi thực hiện bất kỳ thay đổi nào bên trong bar()
hàm, các thay đổi đó sẽ xuất hiện bên ngoài phạm vi cục bộ, tức là foo()
.