Quy tắc legb trong python
Logic đằng sau phạm vi là phạm vi xác định khả năng truy cập của các biến, hàm, đối tượng, v.v. Nó trực tiếp phụ thuộc vào nơi bạn tạo ra chúng Để hiểu thực sự cách phân giải phạm vi xảy ra trong Python, chúng ta nên phân tích quy tắc LEGB bởi vì, đó là chuỗi tên (biến, hàm, đối tượng, v.v.) mà Python phân giải trong một chương trình
Phạm vi cục bộ (hoặc chức năng) Phạm vi cục bộ đề cập đến tên (biến, hàm, v.v.) được xác định bên trong hàm. Nó có nghĩa là nó có thể truy cập được trong thời điểm nó được xác định cho đến khi kết thúc chức năng. Phạm vi cụ thể đó không thể được sửa đổi hoặc thậm chí truy cập bên ngoài chức năng. Như một ví dụ, def example(): Biến x chỉ có thể được truy cập bên trong hàm example(), vì vậy, khi chúng tôi cố gắng sử dụng nó dưới dạng print(x), nó sẽ không báo lỗi. Tuy nhiên, khi chúng tôi cố gắng tiếp cận nó từ bên ngoài hàm (bên dưới chúng tôi gọi là hàm ví dụ), sẽ xảy ra lỗi NameError: name 'x' is not defined Đó là bởi vì, phạm vi cục bộ không hiển thị bên ngoài chức năng nơi nó được tạo Phạm vi kèm theo là loại phạm vi chỉ tồn tại trong các hàm lồng nhau (Một hàm được xác định bên trong một hàm khác được gọi là hàm lồng nhau). Phạm vi kèm theo chỉ hiển thị cho các chức năng bên trong và kèm theo def example(): Đây là đầu ra của chúng tôi, outer function Như chúng ta đã học trước đây vì lý do y là một phạm vi cục bộ, nó chỉ có thể được gọi bên trong example_inner(). Tuy nhiên, x là một phạm vi bao quanh, điều đó có nghĩa là nó có thể được gọi bên trong hàm example(), hơn nữa là bên trong hàm example_inner() (bởi vì, mặc dù thực tế nó là một hàm khác, nhưng nó vẫn nằm trong hàm example()) Phạm vi toàn cầu (hoặc mô-đun)Phạm vi toàn cầu chứa tất cả các tên (biến, hàm, đối tượng, v.v.) mà bạn xác định ở mức cao nhất trong chương trình của mình. Điều đó có nghĩa là chúng ta có thể sử dụng tên đó từ bất cứ đâu chúng ta muốn str="global function" Đầu ra sẽ là, global function Phạm vi tích hợpPhạm vi tích hợp có khả năng truy cập rộng nhất trong số các phạm vi khác. Chúng tôi có thể đưa ra các ví dụ như từ khóa, chức năng và các thuộc tính khác được tích hợp trong Python (Chúng tôi có thể gọi các từ khóa ở bất kỳ đâu trong chương trình của mình mà không cần xác định chúng) from math import pi Mặc dù chúng tôi không gán pi cho bất kỳ giá trị nào, nhưng khi chúng tôi sử dụng nó như trong đoạn mã trên, chúng tôi sẽ nhận được kết quả là, 3.141592653589793 Xét cho cùng, logic của quy tắc LEGB là trình tự mà trình thông dịch Python tuân theo khi thực thi chương trình của bạn. Đầu tiên, nó kiểm tra gần nhất ( →Phạm vi cục bộ), nếu nó không tồn tại, di chuyển một bước đến ( →Phạm vi toàn cầu) và với logic tương tự, nó sẽ kiểm tra ( →Phạm vi toàn cầu) và ở cuối ( →Phạm vi tích hợp) Hãy kiểm tra ví dụ nhanh để hiểu rõ hơn ________số 8ĐẦU RA sẽ là, Local scope Bởi vì khi chúng ta gọi hàm, chúng ta tạo một phạm vi cục bộ (“Phạm vi cục bộ”) và chúng ta cũng có một phạm vi toàn cầu (“Phạm vi toàn cầu”). Hàm ví dụ(x) ở vị trí đầu tiên xem liệu có phạm vi cục bộ hay không (có →“Phạm vi cục bộ”). Vì vậy, nó in "Phạm vi cục bộ" Tuy nhiên, trong ví dụ này NameError: name 'x' is not defined 0ĐẦU RA của chúng tôi là NameError: name 'x' is not defined 1Lần này khi chúng ta gọi một hàm, chúng ta không tạo bất kỳ phạm vi cục bộ nào. Hàm example() một lần nữa, trước tiên kiểm tra phạm vi cục bộ (không có), sau đó tiến lên một bước và kiểm tra phạm vi toàn cục (“Phạm vi toàn cầu”). Vì vậy, nó in "Phạm vi toàn cầu" |