Phạm vi kèm theo trong python là gì?

Sâu hơn nữa, chúng ta đi vào Python Mines of Moria, nhưng tôi hứa không có Balrog nào ở đây. Bây giờ chúng tôi đã đạt đến điểm của phạm vi và tôi sẽ hướng dẫn bạn rõ ràng. Phạm vi hơi khét tiếng, đặc biệt khi một người là người tiên phong. Nó có thể khiến bạn ngạc nhiên một cách chân thành, vì bạn sẽ thấy một số dòng nhất định kết thúc tuyệt đối.

Vì vậy, hãy để tôi giúp trò chơi tìm đường. Trong lập trình, phạm vi của tên xác định khu vực của chương trình mà bạn có thể truy cập tên đó một cách rõ ràng. Tên trong trường hợp này có nghĩa là biến, hàm, đối tượng hoặc lớp. Một tên sẽ chỉ hiển thị và có thể truy cập bằng mã nếu nó nằm trong phạm vi. Một tên cũng có thể được gọi là một định danh hoặc một không gian tên. Không gian tên là hệ thống Python sử dụng để có một tên duy nhất cho mọi biến hoặc phương thức trong Python. Bản thân Python duy trì các không gian tên ở dạng từ điển Python

Có bốn cấp phạm vi khác nhau là cục bộ, kèm theo, toàn cầu và tích hợp. Chúng được đảo chữ thành LEGB. Mỗi trong số này và nhiều hơn nữa sẽ được khám phá trong hướng dẫn này. Nội dung của hướng dẫn này với các liên kết nhanh có thể được nhìn thấy dưới đây

Nếu đây là lần đầu tiên bạn tiếp xúc với Python thì một nơi tuyệt vời để bắt đầu là Python Rundown và Main Windows. Những điều này cũng sẽ cho bạn biết nơi tải xuống Python và truy cập trình giả lập Python trực tuyến. Python là ngôn ngữ tuyệt vời để sử dụng với Raspberry Pi Boards chẳng hạn như Raspberry Pi 4 Model B 8GB. Đây là những thiết bị máy tính có thể dễ dàng nằm gọn trong lòng bàn tay của bạn

Như mọi khi nếu bạn có bất kỳ câu hỏi, thắc mắc hoặc điều gì cần thêm, vui lòng cho chúng tôi biết suy nghĩ của bạn


Tại sao phạm vi?

Trước khi có phạm vi, chỉ có tên toàn cầu. Điều này có nghĩa là bất kỳ phần nào của chương trình có thể sửa đổi bất kỳ biến nào vào bất kỳ lúc nào. Đây là cách nó diễn ra trong nhiều ngôn ngữ lập trình ban đầu như BASIC. Nhược điểm lớn nhất của điều này là khi tạo các chương trình lớn, điều quan trọng là mỗi biến phải có một tên duy nhất. Nếu không các vấn đề lớn sẽ xảy ra khi các phần của phần mềm bắt đầu tương tác theo những cách không được lên kế hoạch. Do đó, lập trình viên sẽ phải nhớ mọi biến, điều này cuối cùng sẽ trở nên bất khả thi khi các mã ngày càng lớn hơn.

Vì vậy, bây giờ hầu hết các ngôn ngữ lập trình đều sử dụng phạm vi để tránh điều này. Phạm vi ngăn bạn truy cập tất cả các biến trong chương trình tại tất cả các vị trí trong chương trình đó. Đối với Python, khả năng mã truy cập vào một tên đã cho sẽ phụ thuộc vào nơi chính xác tên đó đã được xác định. Khi bạn có thể truy cập vào giá trị của một tên nhất định từ mã của mình, điều này có nghĩa là tên đó nằm trong phạm vi. Nếu bạn không thể truy cập vào tên, điều này có nghĩa là tên đó nằm ngoài phạm vi


Tổng quan về LEGB

Tại bất kỳ thời điểm nào trong quá trình thực thi mã của bạn, sẽ có tối đa bốn mức phạm vi Python. Đây là cục bộ, kèm theo, toàn cầu và tích hợp sẵn (viết tắt đảo chữ LEGB) được giải thích bên dưới.  

A Python under the Scope- Phạm vi tích hợp. Đây là một phạm vi Python đặc biệt được tạo bất cứ khi nào có bất kỳ tập lệnh nào đang chạy hoặc một cửa sổ có lập trình tương tác được mở. Một cửa sổ có chương trình tương tác đang hoạt động có nghĩa là nó liên tục trải qua chu kỳ đọc, đánh giá, in. Python IDLE Shell là một ví dụ về điều này. Sau khi nhập một dòng mã, kết quả phản hồi ngay lập tức. Một số tên bên trong phạm vi tích hợp có thể được tìm thấy trong hướng dẫn Tất cả các chức năng tích hợp sẵn của Python.
- Phạm vi Toàn cầu. Điều này cũng được gọi là phạm vi mô-đun. Đây là phạm vi hàng đầu trong ngôn ngữ lập trình Python. Phạm vi này chứa tất cả các tên mà bạn đã xác định ở cấp cao nhất của chương trình hoặc mô-đun. Do đó, tên trong phạm vi này có thể được truy cập từ mọi nơi trong tập lệnh của bạn.
- Phạm vi cục bộ. Điều này cũng được gọi là phạm vi chức năng. Phạm vi này chứa tất cả các tên mà bạn đã xác định bên trong một hàm. Những tên này chỉ hiển thị từ mã của hàm. Phạm vi này chỉ được tạo khi hàm được gọi. Nhiều phạm vi cục bộ có thể tồn tại đồng thời. Mỗi khi một hàm được gọi, một phạm vi cục bộ mới được tạo. Ngay cả khi đó là chức năng tương tự được gọi lại, phạm vi cục bộ mới sẽ được tạo. Các. lamda. từ khóa cũng tạo phạm vi cục bộ khi nó được thực thi trong mã.
- Phạm vi kèm theo. Điều này cũng được gọi là phạm vi không cục bộ. Đây là một phạm vi đặc biệt chỉ tồn tại cho các chức năng lồng nhau. Hàm lồng nhau là một hàm được xác định trong một hàm khác. Chức năng bên ngoài/bên ngoài được gọi là chức năng kèm theo. Nếu phạm vi cục bộ là một hàm lồng nhau thì phạm vi kèm theo là phạm vi của hàm bên ngoài/chức năng bên ngoài. Phạm vi này chứa tất cả các tên được xác định trong hàm kèm theo. Các tên trong phạm vi kèm theo có thể được truy cập bằng hàm lồng và kèm theo. Thông tin thêm về chức năng có thể được tìm thấy trong hướng dẫn Tạo chức năng Python của riêng bạn.

Python có một thủ tục mà nó sẽ luôn tuân theo để tra cứu tên. Đầu tiên, nó sẽ xem qua tất cả các tên trong phạm vi cục bộ, sau đó là phạm vi kèm theo, sau đó là phạm vi toàn cầu và cuối cùng là phạm vi tích hợp. Dưới đây là một hình ảnh tuyệt vời để hình dung điều này. Bây giờ, tùy thuộc vào mã, có thể có ít mức phạm vi hơn, tuy nhiên sẽ luôn có các lớp phạm vi tích hợp và toàn cầu có sẵn trong mã Python của bạn.  

The Order in which scope is performed by Python, starting with Local.


Chi tiết LEGB được lập bảng

Có một số chi tiết chính về các phạm vi này, ví dụ như phạm vi nào có thể thay đổi các biến ở cấp độ phạm vi khác, điều này được thể hiện rõ nhất khi được lập thành bảng. Bảng này so sánh chúng với nhau được nhìn thấy bên dưới. Đáng chú ý, để khai báo mã là toàn cầu hoặc không cục bộ, bạn đã sử dụng các từ khóa. toàn cầu. và. phi cục bộ. tương ứng. Thông tin thêm về các từ khóa này có thể được tìm thấy trong hướng dẫn Tất cả các từ khóa trong Python

Details about what variables can be altered depending on scope level


Ví dụ về tập lệnh phạm vi

Vì vậy, hãy để chúng tôi làm rõ phạm vi với một số ví dụ mã. Các giải thích sẽ xuyên suốt vì một số tập lệnh này sẽ hoạt động và một số sẽ khiến thông báo lỗi Python xuất hiện. Điều này là để chứng minh tác động của các phạm vi khác nhau đối với tập lệnh Python của bạn. Do đó, sau đây sẽ là một loạt các tập lệnh được tạo trong Cửa sổ lập trình Python với Python IDLE Shell được nhìn thấy liền kề

1. Kịch bản dưới đây sử dụng. toàn cầu. từ khóa để phạm vi cục bộ có thể sửa đổi biến A tồn tại trong phạm vi toàn cầu. Phạm vi cục bộ tồn tại vì một chức năng đã được tạo. Việc sửa đổi xảy ra với biến A là thêm 2 vào giá trị ban đầu. Thông thường, một hàm không thể sửa đổi biến toàn cục mà chỉ có thể truy cập vào biến đó. Bằng cách sử dụng từ khóa này, mã có thể thực thi đầy đủ. Vì vậy, khi tập lệnh này được chạy và sau đó khi môi trường gọi hàm gọi hàm này, giá trị 3 sẽ được in trở lại môi trường gọi

This is the same code as before but we have not given the function the capacity to access and modify the variable A by using the global keyword.


2. Mã này chứng minh rằng trong Python, theo mặc định, một hàm không thể sửa đổi một biến toàn cục. Đây là một điều tốt vì bạn sẽ không cần phải nhớ mọi biến và tạo tên mới cho mọi biến mới mà bạn tạo. Nếu bất kỳ chức năng nào có thể sửa đổi các biến toàn cục và sau đó các tên biến giống nhau được sử dụng, các mã sẽ ghi đè lên nhau trái, phải và giữa. Sự hỗn loạn. Nhìn thấy bên dưới là một hàm tạo có phạm vi cục bộ và cố gắng sửa đổi một biến. Việc tạo biến xảy ra trước đó ở phạm vi toàn cầu. Vì điều này không hoạt động, một thông báo lỗi sẽ xuất hiện khi sau khi tập lệnh được chạy và môi trường gọi hàm gọi hàm

The function is not allowed to access and change the global variable. This is a good thing.


3. Tập lệnh này cho thấy phạm vi toàn cầu không thể truy cập biến phạm vi cục bộ. Bên dưới là một biến được tạo trong một hàm. Sau đó, biến này được cố gắng gọi từ phạm vi toàn cầu. Điều này sẽ luôn khiến thông báo lỗi xuất hiện trong môi trường gọi vì phạm vi toàn cầu đang cố gọi một biến dựa trên phạm vi cục bộ không thể thực hiện được

Global scope attempting to search for variable but cannot find it as it has been defined in a local scope.


4. Dưới đây là tập lệnh trong đó một phạm vi cục bộ đang cố sửa đổi một biến nằm bên trong một phạm vi cục bộ khác. Vì điều này không thể thực hiện được, một thông báo lỗi sẽ hiển thị bên trong môi trường gọi điện. Đây là một ví dụ khái niệm tốt chứng minh rằng nhiều phạm vi cục bộ có thể tồn tại đồng thời trong Python. Số lượng phạm vi địa phương tồn tại đồng thời là vô hạn.  A local scope attempting to modify variable of a different local scope


5. Dưới đây là một tập lệnh có hai chức năng được lồng vào nhau. Khi mã được chạy và môi trường gọi gọi hàm bên ngoài, ba thứ được in ra môi trường gọi. Đây là hai câu lệnh xin chào từ cả hàm bên trong và bên ngoài và một số. Con số này bắt đầu hoạt động như một biến được tạo bên trong hàm bên ngoài. Sau đó, trong hàm bên trong (lồng nhau), biến đã được xác định không cục bộ bằng cách sử dụng. phi cục bộ. từ khóa và sau đó biến đã được sửa đổi. Do đó, một biến tồn tại trong phạm vi kèm theo đã được sửa đổi bởi mã bên trong hàm lồng nhau bằng cách sử dụng thành công. phi cục bộ. từ khóaModifying variable that exists in outer function from inner function successfully by utilising the nonlocal keyword


6. Đây là mã tương tự như trên, nó có hai chức năng được lồng vào nhau. Một nỗ lực được thực hiện để sửa đổi biến đã được tạo trong hàm bên ngoài bằng cách sử dụng mã từ hàm bên trong (lồng nhau). Điều này được thực hiện mà không cần sử dụng. phi cục bộ. từ khóa để xác định biến có phạm vi không cục bộ. Khi mã được chạy và môi trường gọi gọi hàm, nó sẽ gây ra lỗi Python có thể nhìn thấy liền kề.  

Attempting to modify a varaible that was created in the outer function from the inner function without using a nonlocal variable.


Bước tiếp theo

Nhập khẩu sẽ là hành tinh tiếp theo tốt nhất để truy cập để tìm hiểu thêm về thế giới Python. Thay vì tạo các chức năng của riêng bạn và nỗ lực hết mình sẽ tốt hơn biết bao nếu bạn có thể có chức năng ngay lập tức. Trong hướng dẫn tiếp theo, Nhập, Từ và Dưới dạng Từ khóa trong Python, tôi sẽ chỉ cho bạn cách thực hiện điều đó. Hơn nữa, trong hướng dẫn đó, bạn sẽ thấy lý do tại sao Python được đánh giá là một gã khổng lồ quyền lực trong lĩnh vực lập trình.  


Tải xuống mã

Dưới đây bạn có thể tìm thấy tất cả mã cho các ví dụ trên. Bạn sẽ có thể chạy các mã ở đây trên thiết bị máy tính của riêng mình và sửa đổi mã khi rảnh rỗi. Mở nó lên bằng Python IDLE Shell và chạy nó bằng Cửa sổ lập trình Python

Biến kèm theo trong Python là gì?

Phạm vi kèm theo còn được gọi là phạm vi không cục bộ. Chúng đề cập đến tên của một biến được xác định trong hàm lồng nhau . Nói một cách đơn giản, các biến này không có trong phạm vi cục bộ cũng như trong phạm vi toàn cầu. Để tạo một biến không cục bộ trong phạm vi kèm theo, hãy sử dụng từ khóa không cục bộ.

Không gian tên kèm theo trong Python là gì?

Không gian tên kèm theo. Khi một hàm được định nghĩa bên trong một hàm, nó sẽ tạo ra một không gian tên kèm theo . Vòng đời của nó giống như không gian tên cục bộ. Không gian tên toàn cầu. nó thuộc về tập lệnh python hoặc mô-đun hiện tại. Không gian tên chung cho một mô-đun được tạo khi định nghĩa mô-đun được đọc.

Phạm vi của một lớp trong Python là gì?

Phạm vi là vùng văn bản của chương trình Python nơi không gian tên có thể truy cập trực tiếp . “Có thể truy cập trực tiếp” ở đây có nghĩa là một tham chiếu không đủ tiêu chuẩn đến một tên cố gắng tìm tên đó trong không gian tên. Mặc dù phạm vi được xác định tĩnh nhưng chúng được sử dụng động.

Phạm vi rộng nhất trong Python là gì?

Các loại phạm vi biến Python .
Phạm vi địa phương. Các biến phạm vi cục bộ chỉ có thể được truy cập trong khối của nó. .
Phạm vi toàn cầu. Các biến được khai báo trong phạm vi toàn cầu có thể được truy cập từ bất kỳ đâu trong chương trình. .
Phạm vi kèm theo. Một phạm vi không cục bộ hoặc toàn cầu thuộc phạm vi kèm theo. .
Phạm vi tích hợp