Biến toàn cục là biến được định nghĩa và khai báo bên ngoài hàm và chúng ta cần sử dụng chúng trong hàm.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

# This function uses global variable s 
def f():  
    print s  
  
# Global scope 
s = "I love Cafedev.vn"
f() 

Kết quả:

I love Cafedev.vn

Biến s được định nghĩa là chuỗi “I love Cafedev.vn”, trước khi chúng ta gọi hàm f(). Lệnh duy nhất trong hàm f() là câu lệnh “print s”. Vì không có biến s cục bộ, giá trị từ biến s toàn cục sẽ được sử dụng.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# This function has a variable with 
# name same as s. 
def f():  
    s = "Me too."
    print s  
  
# Global scope 
s = "I love Cafedev.vn" 
f() 
print s 

Kết quả:

Me too.
I love Cafedev.vn

Nếu một biến có cùng tên cũng được định nghĩa bên trong phạm vi của hàm thì nó sẽ chỉ in giá trị được cung cấp bên trong hàm chứ không phải giá trị toàn cục.

Câu hỏi là: điều gì sẽ xảy ra nếu chúng ta thay đổi giá trị của biến s bên trong hàm f()? Nó cũng sẽ ảnh hưởng đến biến toàn cục chứ? Chúng ta kiểm tra nó trong đoạn code sau:

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


def f():  
    print s 
  
    # This program will NOT show error 
    # if we comment below line.  
    s = "Me too."
  
    print s 
  
# Global scope 
s = "I love cafedev" 
f() 
print s 

Kết quả:

Line 2: undefined: Error: local variable 's' referenced before assignment

Để chương trình trên hoạt động, chúng ta cần sử dụng từ khóa “global”. Chúng ta chỉ cần sử dụng từ khóa toàn cục trong một hàm nếu chúng ta muốn thực hiện các tác vụ/thay đổi chúng. Toàn cục là không cần thiết để in và truy cập. Tại sao vậy? Python có giả định rằng chúng ta muốn một biến cục bộ do các tác vụ cho biến s nằm bên bên trong hàm f(), vì vậy câu lệnh in đầu tiên hiện thông báo lỗi này. Bất kỳ biến nào được thay đổi hoặc tạo bên trong hàm là cục bộ nếu nó chưa được khai báo là biến toàn cục. Để nói với Python rằng chúng ta muốn sử dụng biến toàn cục, chúng ta phải sử dụng từ khóa toàn cục (global), có thể thấy trong ví dụ sau:

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# This function modifies the global variable 's' 
def f(): 
    global s 
    print s 
    s = "Look for cafedev Python Section"
    print s  
  
# Global Scope 
s = "Python is great!" 
f() 
print s 

Kết quả:

Python is great!
Look for Geeksforgeeks Python Section.
Look for Geeksforgeeks Python Section.

Một ví dụ hay khác:


a = 1
  
# Uses global because there is no local 'a' 
def f(): 
    print 'Inside f() : ', a 
  
# Variable 'a' is redefined as a local 
def g():     
    a = 2
    print 'Inside g() : ',a 
  
# Uses global keyword to modify global 'a' 
def h():     
    global a 
    a = 3
    print 'Inside h() : ',a 
  
# Global scope 
print 'global : ',a 
f() 
print 'global : ',a 
g() 
print 'global : ',a 
h() 
print 'global : ',a 

Kết quả:

global :  1
Inside f() :  1
global :  1
Inside g() :  2
global :  1
Inside h() :  3
global :  3

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!