Quy tắc LEGB trong ví dụ về Python
Chuyển đến nội dung chính
Show
Python trung gianNâng cao kỹ năng khoa học dữ liệu của bạn bằng cách tạo trực quan hóa bằng Matplotlib và thao tác với DataFrames bằng gấu trúcKhông gian tên python là một vùng chứa nơi các tên được ánh xạ tới các đối tượng, chúng được sử dụng để tránh nhầm lẫn trong trường hợp các tên giống nhau tồn tại trong các không gian tên khác nhau. Chúng được tạo bởi các mô-đun, hàm, lớp, v.v. Phạm vi trong Python là gìMột phạm vi xác định thứ tự phân cấp trong đó các không gian tên phải được tìm kiếm để có được ánh xạ của tên-đối tượng(biến). Đó là một bối cảnh trong đó các biến tồn tại và từ đó chúng được tham chiếu. Nó xác định khả năng truy cập và thời gian tồn tại của một biến. Hãy để chúng tôi lấy một ví dụ đơn giản như hình dưới đây. Python3inner pi variable1 inner pi variable2 inner pi variable3 inner pi variable4 inner pi variable5 inner pi variable0 inner pi variable1____51____52 inner pi variable4 _______01____06____07 inner pi variable4 inner pi variable9 inner pi variable6 inner pi variable7 đầu ra inner pi variable outer pi variable Chương trình trên cho các kết quả đầu ra khác nhau vì cùng một tên biến pi nằm trong các không gian tên khác nhau, một bên trong hàm print_pi và một bên ở cấp cao hơn. Khi print_pi() được thực thi, ' biến số pi bên trong ' được in vì đó là giá trị pi bên trong không gian tên hàm. Giá trị ‘biến pi bên ngoài‘ được in khi pi được tham chiếu trong không gian tên bên ngoài. Từ ví dụ trên, chúng ta có thể đoán rằng chắc chắn có một quy tắc được tuân theo, để quyết định một biến phải được chọn từ không gian tên nào. Độ phân giải phạm vi Quy tắc LEGB Trong PythonTrong Python, quy tắc LEGB được sử dụng để quyết định thứ tự tìm kiếm các không gian tên để phân giải phạm vi. Các phạm vi được liệt kê bên dưới theo thứ bậc (cao nhất đến thấp nhất/hẹp nhất đến rộng nhất)
Phạm vi cục bộ trong PythonPhạm vi cục bộ đề cập đến các biến được xác định trong hàm hiện tại. Luôn luôn, một hàm trước tiên sẽ tra cứu một tên biến trong phạm vi cục bộ của nó. Chỉ khi nó không tìm thấy nó ở đó, phạm vi bên ngoài mới được kiểm tra. Python3inner pi variable02 inner pi variable1 inner pi variable2 inner pi variable05 inner pi variable5 inner pi variable07 inner pi variable1____51____52 inner pi variable4 _______01____06____07 inner pi variable4 inner pi variable86 đầu ra inner pi variable Khi chạy chương trình trên, việc thực thi hàm bên trong sẽ in giá trị của biến pi cục bộ (mức ưu tiên cao nhất trong quy tắc LEGB) vì nó được xác định và có sẵn trong phạm vi cục bộ. Phạm vi cục bộ và toàn cầu trong PythonNếu một biến không được xác định trong phạm vi cục bộ, thì nó sẽ được kiểm tra ở phạm vi cao hơn, trong trường hợp này là phạm vi toàn cầu. Python3inner pi variable87 inner pi variable1 inner pi variable2 inner pi variable05 inner pi variable5 inner pi variable07 inner pi variable1____51____52 inner pi variable4 _______01____06____07 inner pi variable4 inner pi variable86 inner pi variable6 inner pi variable7 đầu ra inner pi variable0 Do đó, như mong đợi, chương trình sẽ in ra giá trị trong phạm vi cục bộ khi thực thi hàm trong(). Đó là bởi vì nó được định nghĩa bên trong hàm và đó là nơi đầu tiên mà biến được tra cứu. Giá trị pi trong phạm vi toàn cầu được in khi thực thi print(pi) trên dòng 9. Phạm vi cục bộ, kèm theo và toàn cầu trong PythonĐối với phạm vi kèm theo, chúng ta cần định nghĩa một hàm bên ngoài bao quanh hàm bên trong, nhận xét biến cục bộ pi của hàm bên trong và tham chiếu đến pi bằng cách sử dụng từ khóa nonlocal. Python3inner pi variable14 inner pi variable1 inner pi variable2 inner pi variable05 inner pi variable4 inner pi variable5 inner pi variable20 inner pi variable1____51____52 inner pi variable3 inner pi variable1 inner pi variable5 inner pi variable07 inner pi variable28 inner pi variable29 inner pi variable28 inner pi variable31 inner pi variable28 inner pi variable6 inner pi variable7 inner pi variable1 inner pi variable86 inner pi variable4 inner pi variable38 inner pi variable6 inner pi variable7 đầu ra inner pi variable8 Khi bên ngoài () được thực thi, bên trong () và do đó, các hàm in được thực thi, in giá trị của biến số pi kèm theo. Câu lệnh trong dòng 10 tìm kiếm biến trong phạm vi cục bộ bên trong, nhưng không tìm thấy nó ở đó. Vì pi được tham chiếu với từ khóa nonlocal, điều đó có nghĩa là pi cần được truy cập từ hàm bên ngoài (i. e phạm vi bên ngoài). Tóm lại, biến pi không được tìm thấy trong phạm vi cục bộ, vì vậy các phạm vi cao hơn sẽ được tra cứu. Nó được tìm thấy trong cả phạm vi kèm theo và toàn cầu. Nhưng theo hệ thống phân cấp LEGB, biến phạm vi kèm theo được xem xét mặc dù chúng ta đã xác định một biến trong phạm vi toàn cầu. Phạm vi cục bộ, kèm theo, toàn cầu và tích hợpKiểm tra cuối cùng có thể được thực hiện bằng cách nhập pi từ mô-đun toán học và nhận xét về các biến pi toàn cục, kèm theo và cục bộ như hình bên dưới. Python3inner pi variable41 inner pi variable42 inner pi variable43____544 inner pi variable1 inner pi variable4 inner pi variable47 inner pi variable4 inner pi variable5 inner pi variable20 _______01____552 inner pi variable1 inner pi variable5 inner pi variable07 inner pi variable28 inner pi variable29 inner pi variable28 inner pi variable6 inner pi variable7 inner pi variable1 inner pi variable86 inner pi variable4 inner pi variable38 đầu ra inner pi variable0 Vì, pi không được xác định trong phạm vi cục bộ, kèm theo hoặc toàn cầu, nên phạm vi tích hợp được tra cứu i. e giá trị pi được nhập từ mô-đun toán học. Vì chương trình có thể tìm thấy giá trị của pi trong phạm vi ngoài cùng, nên sẽ thu được đầu ra sau, Biến phạm vi trong Python với ví dụ là gì?Phạm vi biến trong Python là gì? . Các biến này chỉ có thể được truy cập trong khu vực mà chúng được xác định , đây được gọi là phạm vi. Bạn có thể coi đây là một khối nơi bạn có thể truy cập các biến.
Ý nghĩa của L trong quy tắc LEGB đối với độ phân giải phạm vi là gì?Trong Python, quy tắc LEGB được sử dụng để quyết định thứ tự tìm kiếm các vùng tên để phân giải phạm vi. Các phạm vi được liệt kê bên dưới theo thứ bậc (cao nhất đến thấp nhất/hẹp nhất đến rộng nhất). địa phương(L). Được định nghĩa bên trong hàm/lớp .
Ví dụ về độ phân giải phạm vi trong Python là gì?Độ phân giải phạm vi trong Python tuân theo quy tắc LEGB. L, Local — Các tên được gán theo bất kỳ cách nào trong một hàm (hoặc lambda) và không được khai báo toàn cầu trong hàm đó. E, Các hàm cục bộ kèm theo - Tên trong phạm vi cục bộ của bất kỳ và tất cả các hàm (hoặc lambdas) tĩnh kèm theo, từ bên trong ra bên ngoài
Hình thức đầy đủ của LEGB là gì?Các chữ cái trong từ viết tắt LEGB là viết tắt của Phạm vi cục bộ, Bao quanh, Toàn cầu và Tích hợp . |