CÔNG CỤ
MODULES
THAM KHẢO
Cách chia List thành các phần bằng nhau trong Python Cách xóa một khóa (key) ra khỏi dictionary trong Python Hướng dẫn chuyển đổi file Google Colab sang Markdown trong Python Bài tập Python: Lập trình cơ sở dữ liệu trong Python Kết nối cơ sở dữ liệu MySQL Python Hướng dẫn kết nối Python PostgreSQL bằng Psycopg2 Hướng dẫn kết nối SQLite sử dụng sqlite3 trong Python Bài tập Python : Pandas trong Python Phạm vi số float của Python Cách lên lịch chạy script Python bằng GitHub Actions Cách tạo hằng số trong Python Các nền tảng lưu trữ tốt nhất cho ứng dụng và script Python 6 Tip viết vòng lặp For hiệu quả hơn trong Python Cách đảo ngược Chuỗi String trong Python Cách gỡ lỗi ứng dụng Python trong Docker Container bằng VS Code 10 tip One Liner bạn cần biết trong Python Cách áp dụng ngưỡng hình ảnh trong Python với NumPy Tìm hiểu về các phép toán Groupby trong Pandas Lập trình Socket trong Python Mô-đun base64 trong Python Cách giới hạn float values trong Python Tìm hiểu Mô-đun statistics Trong Python File Organizing trong Python Đổi tên File trong Python Tìm hiểu về Deque trong Python Mô-đun Calendar trong Python Tìm hiểu về Enum trong Python Sử dụng pprint trong Python Làm việc với cấu trúc Dữ liệu Stack trong Python Thư viện functools trong Python Tip sử dụng hàm round() với tham số âm trong Python Hàm print có thể nhận thêm các tham số bổ sung trong Python Tip tìm chuỗi dài nhất bằng hàm max() trong Python Cách lặp qua nhiều list với hàm zip() trong Python Tìm hiểu về MLOps trong Python Docker và Kubernetes với MLOps trong Python Kết hợp DevOps với MLOps trong Python Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python tối ưu quy trình MLOps Với Python Sự khác biệt giữa byte objects và string trong Python Top 4 thư viện phổ biến nhất của NLP trong Python Cách sử dụng ThreadPoolExecutor trong Python Phân tích dữ liệu Blockchain với Python Hướng dẫn triển khai Smart Contracts với Python Blockchain APIs với Python Làm việc với file ZIP trong Python Sự khác biệt giữa toán tử == và is trong Python Chuyển đổi kiểu dữ liệu trong Python Cách làm việc với file tarball/tar trong Python Sự khác biệt giữa iterator và iterable trong Python Sự khác biệt giữa set() và frozenset() trong Python Làm việc với các biến môi trường trong Python Một tác vụ phổ biến khi làm việc với danh sách trong Python Định dạng chuỗi Strings trong Python Sử dụng Poetry để quản lý dependencies trong Python Sự khác biệt giữa sort() và sorted() trong Python Từ khóa yield trong Python Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass Cách truy cập và thiết lập biến môi trường trong Python Hướng dẫn toàn diện về module datetime trong Python Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python Quản lý sinh viên Python & MySQL
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.

Phạm vi biến trong Python

Hiểu về phạm vi biến là một yếu tố quan trọng để quản lý và sử dụng các biến một cách hiệu quả. Bằng cách nắm rõ các phạm vi biến, bạn có thể kiểm soát cách các biến được tạo, truy cập và thay đổi trong suốt chương trình. Hướng dẫn này sẽ giúp bạn làm quen với khái niệm về phạm vi biến trong Python, bao gồm phạm vi tích hợp, phạm vi toàn cục và phạm vi cục bộ. Sau khi nắm vững các kiến thức này, bạn sẽ có nền tảng vững chắc để viết mã Python rõ ràng, hiệu quả và không gặp phải các lỗi liên quan đến phạm vi biến.

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.

Giới thiệu về phạm vi biến trong Python

Khi bạn gán một đối tượng cho một biến, biến đó sẽ tham chiếu đến đối tượng đó trong bộ nhớ. Điều này có nghĩa là biến được liên kết với đối tượng.

Sau khi gán, bạn có thể truy cập đối tượng bằng tên biến trong các phần khác nhau của mã của bạn. Tuy nhiên, bạn không thể truy cập biến ở mọi nơi trong mã của bạn.

Tên biến và sự liên kết của nó (tên và đối tượng) chỉ tồn tại trong các phần cụ thể của mã của bạn.

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

Phần của mã mà bạn xác định sự liên kết tên/biến được gọi là phạm vi từ vựng của các biến.

Python lưu các sự liên kết này trong cái gọi là không gian tên. Mỗi phạm vi có không gian tên riêng của nó.

Bạn có thể coi một không gian tên như một bảng chứa nhãn và tham chiếu mà nhãn đó được liên kết với.

Phạm vi toàn cục

Phạm vi toàn cục cơ bản là phạm vi của mô-đun. Phạm vi toàn cục chỉ bao phủ một tệp mã nguồn Python duy nhất.

Python không có một phạm vi toàn cục thực sự bao phủ tất cả các mô-đun ngoại trừ phạm vi tích hợp.

Phạm vi tích hợp là một phạm vi đặc biệt cung cấp các đối tượng có sẵn toàn cục như print, len, None, True và False.

Cơ bản, các biến tích hợp và toàn cục tồn tại ở mọi nơi trong một mô-đun.

Nội bộ, các phạm vi toàn cục được lồng trong phạm vi tích hợp:

Python Variable Scopes png

Phạm vi cục bộ

Khi tạo một hàm, bạn có thể định nghĩa các tham số và biến cho hàm đó. Ví dụ:

def tăng(counter, bởi=1):
    kết_quả = counter + bởi
    return kết_quả

Khi bạn thực thi mã, Python đi qua hai giai đoạn: biên dịch và thực thi.

Khi Python biên dịch tệp, nó thêm hàm tăng vào phạm vi toàn cục. Ngoài ra, Python xác định rằng các biến counter, bởi và kết_quả trong hàm tăng() sẽ chỉ thuộc về phạm vi cục bộ của hàm tăng(). Và Python sẽ không tạo ra các biến counter, bởi và kết_quả cho đến khi hàm được thực thi.

Python Built in Scope png

Mỗi khi bạn gọi một hàm, Python tạo ra một phạm vi mới. Python cũng gán các biến được xác định trong hàm đó cho phạm vi đó. Phạm vi này được gọi là phạm vi cục bộ của hàm hoặc phạm vi cục bộ.

Ví dụ của chúng tôi, khi bạn gọi hàm tăng():

tăng(10, 2)

Python tạo ra một phạm vi cục bộ cho cuộc gọi hàm tăng().

Ngoài ra, Python tạo ra các biến cục bộ counter, bởi và kết_quả trong không gian tên cục bộ và liên kết chúng với các giá trị 10, 2 và 12.

Khi hàm hoàn thành, Python sẽ xóa phạm vi cục bộ. Tất cả các biến cục bộ như counter, bởi và kết_quả sẽ không còn trong phạm vi. Nếu bạn cố gắng truy cập các biến này từ bên ngoài hàm tăng(), bạn sẽ nhận được lỗi.

Và nếu bạn gọi hàm tăng() một lần nữa:

tăng(100, 3)

Python tạo ra một phạm vi cục bộ mới và các biến bao gồm counter, bởi và kết_quả, và liên kết chúng với các giá trị 100, 3 và 103.

Tìm kiếm biến

Trong Python, các phạm vi được lồng nhau. Ví dụ, các phạm vi cục bộ được lồng trong một phạm vi mô-đun. Và các phạm vi mô-đun được lồng trong phạm vi tích hợp.

Khi bạn truy cập một đối tượng được liên kết với một biến, Python cố gắng tìm đối tượng đó:

Python Nested Scopes png

  • Trong phạm vi cục bộ hiện tại đầu tiên.
  • Và lên dây chuyền các phạm vi bao quanh nếu Python không tìm thấy đối tượng trong phạm vi hiện tại.

Từ khóa global trong Python

Khi bạn truy xuất giá trị của một biến toàn cục từ bên trong một hàm, Python tự động tìm kiếm không gian tên của phạm vi cục bộ và lên dây chuyền tất cả các không gian tên của phạm vi bao quanh.

Ví dụ:

counter = 10

def hiện_tại():
    print(counter)

hiện_tại()

Trong ví dụ này, khi hàm hiện_tại() được thực thi, Python tìm kiếm biến counter trong phạm vi cục bộ.

Vì Python không tìm thấy nó, nó tìm kiếm biến trong phạm vi toàn cục. Và trong trường hợp này, Python có thể tìm thấy biến counter trong phạm vi toàn cục.

Tuy nhiên, nếu bạn gán một giá trị cho biến toàn cục từ bên trong một hàm, Python sẽ đặt biến đó vào không gian tên cục bộ thay vì vị trí. Ví dụ:

counter = 10

def reset():
    global counter
    counter = 0
    print(counter)

reset()
print(counter)

Kết quả là:

0
0

Trong ví dụ này, câu lệnh sau:

global counter

...chỉ dẫn Python rằng biến counter được liên kết với phạm vi toàn cục, chứ không phải phạm vi cục bộ.

Lưu ý rằng không phải là một thực hành tốt để truy cập biến toàn cục bên trong một hàm.

Kết bài

Nắm vững các phạm vi của biến trong Python là yếu tố then chốt để viết mã hiệu quả và tránh những lỗi không mong muốn. Hiểu rõ về phạm vi tích hợp, phạm vi toàn cục và phạm vi cục bộ giúp bạn kiểm soát cách các biến được tạo ra, truy cập và thay đổi trong suốt chương trình. Python lưu trữ các đối tượng và sự liên kết của chúng trong không gian tên của từng phạm vi, và quá trình tìm kiếm một đối tượng sẽ bắt đầu từ phạm vi hiện tại rồi mới lên các phạm vi bao quanh. Việc biết cách sử dụng từ khóa global cho phép bạn truy cập và thay đổi biến toàn cục từ bên trong một hàm khi cần thiết. Từ đây, bạn có thể tự tin viết mã Python với khả năng quản lý phạm vi biến một cách hiệu quả và chính xác.

Cùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top