INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python Lập trình hướng đối tượng trong Python Class Variables trong Python Tìm hiểu về Methods trong Python Cách sử dụng phương thức __init__() trong Python Các biến Instance trong Python Tìm hiểu về Class Attributes trong Python Hàm Static Methods trong Python Phương thức __str__ trong Python Phương thức __repr__ trong Python Phương thức eq trong Python Tìm hiểu phương thức __hash__ trong Python Phương thức __bool__ trong Python Phương thức del trong Python Tìm hiểu về lớp Property trong Python Tìm hiểu về nạp chồng toán tử trong Python Trình Decorator Property trong Python Thuộc tính chỉ đọc trong Python Thuộc tính Delete trong Python Sử dụng super() trong Python Sử dụng __slots__ trong Python Cách sử dụng Protocol trong Python Sử dụng Enum aliases và @enum.unique trong Python Tùy chỉnh và mở rộng lớp Enum trong Python Cách sử dụng hàm Auto() của Python Single Responsibility Principle trong Python Nguyên tắc Đóng-Mở trong Python Nguyên tắc thay thế Liskov - LSP trong Python Interface Segregation Principle - ISP trong Python. Nguyên tắc đảo ngược sự phụ thuộc trong Python Đa kế thừa trong Python Tìm hiểu về các lớp mixin trong Python Mô tả Descriptors trong Python Phân biệt Data Descriptor và Non-data Descriptor trong Python Phương thức __new__ trong Python Tìm hiểu về Class Type trong Python Lớp Metaclass trong Python Ví dụ sử dụng metaclass trong Python Tìm hiểu về decorator dataclass trong Python Tìm hiểu về các ngoại lệ trong Python Ngoại lệ Raise trong Python Sử dụng câu lệnh raise from trong Python Ngoại lệ tùy chỉnh trong Python Module trong Python Package trong Python Class trong Python Hàm khởi tạo trong Python Kế thừa trong Python Đa kế thừa trong Python Setter và Getter trong Python Override trong Python Interface trong Python Bài tập Python: Module và Class
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Biến toàn cục và biến cục bộ trong Python

Trong bài này chúng ta sẽ tìm hiểu về biến cục bộbiến toàn cục trong Python. Đây là hai phạm vi hoạt động chủ yếu của một biến trong Python, vì vậy bạn phải hiểu để sủ dụng cho đúng.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Đọc đến bài này thì chắc chắn bạn đã hiểu cách tạo hàm trong Python rồi nhỉ? Bạn cũng biết việc sử dụng biến trong một hàm là quá bình thường. Nhưng chuyện gì xảy ra nếu bạn khai báo tên biến trong hàm trùng với tên của một biến nằm bên ngoài hàm?

Rất đơn giản, chỉ cần biết phạm vi hoạt động của biến là bạn sẽ hiểu được cách hoạt động của Python.

1. Biến toàn cục trong Python 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.

Bài viết này được đăng tại [free tuts .net]

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
x = "Học Python tại Freetuts.net"

def foo():
    print("Trong hàm:", x)
foo()
print("Ngoài hàm:", x)

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

Trong hàm : Học Python tại Freetuts.net
Ngoài hàm: Học Python tại Freetuts.net

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ố.

Khi sử dụng biến toàn cục bên trong một hàm thì bạn không được thay đổi giá trị cho biến. Như ví dụ dưới đây là sai, bởi vì mình đã thay đổi giá trị cho biến x.

x = 10

def foo():
    x = x * 2
    print(x)
foo()

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

UnboundLocalError: local variable 'x' referenced before assignment

Lý do là đây: 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ệc 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.

Để giải quyết vấn đề này thì bạn sử dụng từ khóa global nhé.

x = 10

def foo():
    global x
    x = x * 2
    print(x)

# In giá trị 20
foo()

# In giá trị 20 vì x = 20
print(x)

Như bạn thấy, biến cục bộ x đã bị thay đổi bên trong hàm foo.

2. Biến cục bộ trong Python 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:

def foo():
    y = "local"

foo()

# Lệnh này sai vì biến y không tồn tại
print(y)

Do biến y là biến cục bộ nằm bên trong hàm foo() nên đoạn code print(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:

NameError: name 'y' is not defined

3. Từ khóa global trong Python

Mình đã lấy một ví dụ về từ khóa Global ở phần 1 rồi, tuy nhiên mình sẽ giải thích nó kỹ hơn một chút qua phần này nhé.

Để 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ày 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

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:

global global 
local

Khi chúng ta thay đổi giá trị cho biến được khai báo global nằm ở trong hàm thì giá trị của biến đó sẽ thay đổi theo. Xem ví dụ dưới đây để hiểu hơn.

x = 5

def plusNum():
    global x
    x = x * 2

plusNum()
print(x) # kết quả là 10

plusNum()
print(x) # kết quả là 20

plusNum()
print(x) # kết quả là 40

Xem hình:

bien toan cuc JPG

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.

Cùng chuyên mục:

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Cách nạp dữ liệu Machine Learning từ File trong Python

Cách nạp dữ liệu Machine Learning từ File trong Python

Hướng dẫn sử dụng Google Sheets API với Python

Hướng dẫn sử dụng Google Sheets API với Python

Xây dựng  web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn viết Snake Game bằng Python

Hướng dẫn viết Snake Game bằng Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng Python Debugger với hàm breakpoint()

Cách sử dụng Python Debugger với hàm breakpoint()

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hỗ trợ Async trong Django 3.1

Hỗ trợ Async trong Django 3.1

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

Ý nghĩa của if __name__ ==

Ý nghĩa của if __name__ == "__main__" trong Python

Cách xóa phần tử trong danh sách Python

Cách xóa phần tử trong danh sách Python

Top