Cách sử dụng bảng ký hiệu cục bộ trong python?
Hôm nay, chúng ta sẽ xem xét cách sử dụng hàm Show
Hàm locals() cung cấp cho chúng ta bảng ký hiệu cục bộ hiện tại, như một từ điển Bây giờ, nếu bạn không chắc bảng ký hiệu cục bộ chính xác là gì, hãy tiếp tục đọc. Hãy đi từng bước một, bắt đầu với định nghĩa của Bảng ký hiệu Bảng ký hiệu là gì?Chà, Bảng ký hiệu là một bảng bao gồm thông tin liên quan đến các ký hiệu khác nhau. Ở đây, một biểu tượng có thể có nghĩa là bất kỳ thứ gì - tên biến, từ khóa, tên hàm, v.v. Chúng đại diện cho tất cả tên của tất cả các biến, lớp và hàm trong chương trình của bạn Nói chung, Bảng ký hiệu không chỉ bao gồm tên của các đối tượng này mà còn có các thông tin hữu ích khác, như loại đối tượng, phạm vi, v.v. Bây giờ bạn đã biết ý nghĩa của Bảng ký hiệu, hãy đến với các lớp của Bảng ký hiệu Có 2 loại Bảng ký hiệu, cho chương trình Python
Đây là hai bảng ký hiệu, được xác định dựa trên phạm vi toàn cầu và phạm vi cục bộ (hiện tại) Khi chúng tôi đề cập đến Bảng ký hiệu cục bộ, chúng tôi đề cập đến tất cả thông tin trong phạm vi hiện tại của chúng tôi, khi trình thông dịch thực thi từng dòng mã của chúng tôi Chính xác thì hàm local() của Python làm gì?Bây giờ, chức năng của hàm Vì vậy, điều này tự nhiên có nghĩa là đầu ra của Python Ví dụ: nếu bạn có một tệp tên là {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':0. Hãy đặt locals() làm câu lệnh duy nhất của chúng ta và xem điều gì sẽ xảy ra. Chúng ta sẽ lấy tất cả các thông tin liên quan trong phạm vi {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':2 (trong trường hợp này, nó giống với Phạm vi toàn cầu) # main.py print(locals()) Đầu ra có thể {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__': Chà, chúng ta có thể thấy một số thuộc tính của mô-đun {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':2 (Phạm vi toàn cầu), bao gồm cả một số chi tiết gói Như một số bạn có thể ngay lập tức nhận ra, điều này giống với {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':4 ở đây, vì cả hai đều đề cập đến cùng một phạm vi toàn cầu Gọi cho người dân địa phương() từ một phạm vi địa phươngBây giờ, hãy xem xét việc gọi Gọi cho người dân địa phương() bên trong một chức năngHãy xem xét một hàm đơn giản {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':6, nhận hai đối số {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':7 và {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':8 và trả về tổng. Chúng ta sẽ gọi locals() ngay trước khi hàm trả về# Global variable global_var = 1234 def fun(a, b): global global_var temp = 100 print(f"locals() inside fun(a, b) = {locals()}") return a + b if __name__ == '__main__': print(f"locals() outside fun(a, b) = {locals()}") print(fun(10, 20)) đầu ra locals() outside fun(a, b) = {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f7023e1ff60>, '__spec__': None, '__annotations__': {}, '__builtins__': Ở đây, có một sự thay đổi đáng chú ý từ bên trong {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__':6. Ở đây, bảng ký hiệu cục bộ chỉ bao gồm các tên liên quan đến chức năng này Vì phạm vi cục bộ không phải là một phần của gói nên không có thông tin về gói và phần này chỉ chứa các biến liên quan đến hàm, cộng với các đối số Cũng lưu ý rằng biến toàn cục # Global variable global_var = 1234 def fun(a, b): global global_var temp = 100 print(f"locals() inside fun(a, b) = {locals()}") return a + b if __name__ == '__main__': print(f"locals() outside fun(a, b) = {locals()}") print(fun(10, 20))1 là một phần của bảng ký hiệu toàn cục và do đó không có trong bảng ký hiệu cục bộ Gọi người dân địa phương () bên trong LớpĐiều này tương tự như gọi từ một hàm, nhưng điều này sẽ chứa tất cả các phương thức của lớp và các thuộc tính có liên quan Hãy nhanh chóng xem xét, sử dụng một ví dụ class Student(): def __init__(self, name): self.name = name def get_name(self): return self.name print(f"Calling locals() from inside a class => {locals()}") print(f"Calling globals() from inside a class => {globals()}") if __name__ == '__main__': s = Student('Amit') print(s.get_name()) Ở đây, chúng ta sẽ gọi đầu ra Calling locals() from inside a class => {'__module__': '__main__', '__qualname__': 'Student', '__init__': Thật vậy, như bạn có thể thấy, Khi chúng ta gọi Bảng ký hiệu toàn cầu không có bất kỳ thứ gì thuộc loại này, như mong đợi Phần kết luậnTrong bài viết này, chúng ta đã học cách lấy thông tin từ phạm vi cục bộ, sử dụng hàm Bảng ký hiệu địa phương là gì?Bảng ký hiệu cục bộ. Bảng ký hiệu cục bộ chứa các mô tả về biến, loại và cấu trúc chương trình mà trình gỡ lỗi sử dụng để định vị và giải thích các giá trị thời gian chạy . Bảng cung cấp loại ký hiệu, lớp lưu trữ và độ lệch trong các bảng khác để xác định thêm ký hiệu.
Không gian tên trong bảng ký hiệu Python là gì?Thuật ngữ không gian tên được sử dụng thay cho bảng ký hiệu trong tài liệu Python của lớp SymbolTable , một phiên bản cho phép truy cập vào bảng ký hiệu của một khối mã được tạo bởi . Do đó, không gian tên và bảng ký hiệu, trong Python, liên quan đến cùng một thứ.
Bảng biểu tượng Hàm toán Python là gì?Các bảng biểu tượng được tạo bởi trình biên dịch từ AST ngay trước khi mã byte được tạo. Bảng ký hiệu chịu trách nhiệm tính toán phạm vi của mọi số nhận dạng trong mã . symtable cung cấp giao diện để kiểm tra các bảng này.
Bảng ký hiệu và không gian tên là gì?Bảng ký hiệu, trong Perl, là một hàm băm chứa tất cả các tên được xác định trong một không gian tên . Tất cả các tên biến và hàm có thể được tìm thấy ở đó. Băm cho mỗi không gian tên được đặt tên theo không gian tên với hai dấu hai chấm. Ví dụ: bảng ký hiệu cho không gian tên Foo được gọi là %Foo. |