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

Namespaces và Scope trong Python cho người mới bắt đầu

26/08/2022 02:03

name space là một hệ thống có tên duy nhất cho mỗi và mọi đối tượng trong Python. Một đối tượng có thể là một biến hoặc một phương thức.

name space là gì:

name space là một hệ thống có tên duy nhất cho mỗi và mọi đối tượng trong Python. Một đối tượng có thể là một biến hoặc một phương thức. Bản thân Python duy trì một name space dưới dạng một từ điển Python. Hãy xem qua một ví dụ, cấu trúc hệ thống thư mục-tệp trong máy tính. Không cần phải nói, người ta có thể có nhiều thư mục có một tệp có cùng tên bên trong mọi thư mục. Nhưng người ta có thể được chuyển hướng đến tệp, một người muốn, chỉ bằng cách chỉ định đường dẫn tuyệt đối đến tệp. 
Ví dụ thời gian thực, vai trò của name space giống như họ. Người ta có thể không tìm thấy một “Alice” duy nhất trong lớp có thể có nhiều “Alice” nhưng khi bạn đặc biệt yêu cầu “Alice Lee” hoặc “Alice Clark” (kèm theo họ), sẽ chỉ có một (tạm thời là đừng ' t nghĩ rằng cả họ và tên đều giống nhau đối với nhiều học sinh).
Trên các dòng tương tự, trình thông dịch Python hiểu phương thức hoặc biến chính xác nào mà người ta đang cố trỏ đến trong mã, tùy thuộc vào name space. Vì vậy, sự phân chia của từ tự nó cung cấp thêm một chút thông tin. Tên của nó (có nghĩa là tên, một định danh duy nhất) + Dấu cách (nói điều gì đó liên quan đến phạm vi). Ở đây, một tên có thể là của bất kỳ phương thức hoặc biến Python nào và không gian phụ thuộc vào vị trí mà từ đó đang cố gắng truy cập vào một biến hoặc một phương thức.
 

 

Các loại name space:
 

Khi trình thông dịch Python chỉ chạy mà không có bất kỳ mô-đun, phương thức, lớp nào do người dùng định nghĩa, v.v. Một số hàm như print (), id () luôn hiện diện, đây là những name space được tích hợp sẵn. Khi người dùng tạo một mô-đun, một name space chung sẽ được tạo ra, sau đó việc tạo các hàm cục bộ sẽ tạo ra name space cục bộ. name space dựng sẵn bao gồm name space chung và name space chung bao gồm name space cục bộ .
 

Thời gian tồn tại của một name space:
 

Thời gian tồn tại của một name space phụ thuộc vào phạm vi của các đối tượng, nếu phạm vi của một đối tượng kết thúc thì thời gian tồn tại của name space đó cũng kết thúc. Do đó, không thể truy cập các đối tượng của vùng tên bên trong từ vùng tên bên ngoài.
 

Thí dụ: 

Python3

# var1 is in the global namespace
var1 = 5
def some_func():
 
    # var2 is in the local namespace
    var2 = 6
    def some_inner_func():
 
        # var3 is in the nested local
        # namespace
        var3 = 7

Như thể hiện trong hình sau, cùng một tên đối tượng có thể xuất hiện trong nhiều name space vì sự cô lập giữa cùng một tên được duy trì bởi name space của chúng.

Nhưng trong một số trường hợp, người ta có thể chỉ quan tâm đến việc cập nhật hoặc xử lý các biến toàn cục, như thể hiện trong ví dụ sau, người ta nên đánh dấu nó một cách rõ ràng là toàn cục và bản cập nhật hoặc quá trình. Lưu ý rằng dòng “count = count +1” tham chiếu đến biến toàn cục và do đó sử dụng biến toàn cục, nhưng so sánh dòng này với cùng dòng được viết “count = 1”. Sau đó, dòng "số lượng toàn cục" là hoàn toàn cần thiết theo quy tắc phạm vi.

Python3

# Python program processing
# global variable
 
count = 5
def some_method():
    global count
    count = count + 1
    print(count)
some_method()

Đầu ra: 

6

Phạm vi đối tượng trong Python:
 

Phạm vi đề cập đến vùng mã hóa mà từ đó một đối tượng Python cụ thể có thể truy cập được. Do đó người ta không thể truy cập bất kỳ đối tượng cụ thể nào từ bất kỳ nơi nào từ mã, việc truy cập phải được cho phép bởi phạm vi của đối tượng.
Hãy lấy một ví dụ để hiểu chi tiết về tương tự: 
 

Ví dụ 1: 

Python3

# Python program showing
# a scope of object
 
def some_func():
    print("Inside some_func")
    def some_inner_func():
        var = 10
        print("Inside inner function, value of var:",var)
    some_inner_func()
    print("Try printing var from outer function: ",var)
some_func()

 

Output: 

Inside some_func
Inside inner function, value of var: 10

Traceback (most recent call last):
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 8, in 
    some_func()
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 7, in some_func
    print("Try printing var from outer function: ",var)
NameError: name 'var' is not defined