× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

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, globaltừ 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 globaltừ 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 globaltừ khóa.
  • Chúng tôi sử dụng globaltừ 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 globaltừ 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 globaltừ 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.pytệp, để lưu trữ các biến toàn cục

a = 0
b = "empty"

Tạo một update.pytệp, để thay đổi các biến toàn cục

import config

config.a = 10
config.b = "alphabet"

Tạo một main.pytệ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.pytệ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.pyvà main.py.

Mô-đun config.pylưu trữ các biến toàn cục củamộtb. Trong update.pytệp, chúng tôi nhập config.pymô-đun và sửa đổi các giá trị củamộtb. Tương tự, trong main.pytệp, chúng tôi nhập cả hai config.pyvà update.pymô-đ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 globaltừ 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().