Hướng dẫn what is used to define a block of code in python - những gì được sử dụng để xác định một khối mã trong python
4.1. Cấu trúc của một chương trìnhStructure of a program¶Một chương trình Python được xây dựng từ các khối mã. Một khối là một phần của văn bản chương trình Python được thực hiện như một đơn vị. Sau đây là các khối: một mô -đun, thân hàm và định nghĩa lớp. Mỗi lệnh được gõ tương tác là một khối. Tệp tập lệnh (một tệp được cung cấp dưới dạng đầu vào tiêu chuẩn cho trình thông dịch hoặc được chỉ định là đối số dòng lệnh cho trình thông dịch) là một khối mã. Lệnh tập lệnh (lệnh được chỉ định trên dòng lệnh phiên dịch với tùy chọn Show
Một khối mã được thực thi trong khung thực thi. Một khung chứa một số thông tin hành chính (được sử dụng để gỡ lỗi) và xác định vị trí và cách thực thi tiếp tục sau khi thực hiện khối mã đã hoàn thành. 4.2. Đặt tên và Binding¶Naming and binding¶4.2.1. Ràng buộc tênBinding of names¶Tên đề cập đến các đối tượng. Tên được giới thiệu bởi các hoạt động ràng buộc tên. Các cấu trúc sau đây liên kết tên:
Tuyên bố i = 10 def f(): print(i) i = 42 f()1 của Mẫu i = 10 def f(): print(i) i = 42 f()3 liên kết tất cả các tên được xác định trong mô -đun đã nhập, ngoại trừ các tên bắt đầu bằng dấu gạch dưới. Hình thức này chỉ có thể được sử dụng ở cấp độ mô -đun. Một mục tiêu xảy ra trong một tuyên bố i = 10 def f(): print(i) i = 42 f()4 cũng được coi là bị ràng buộc cho mục đích này (mặc dù ngữ nghĩa thực tế là để giải phóng tên). Mỗi câu lệnh gán hoặc nhập xảy ra trong một khối được xác định bởi một định nghĩa lớp hoặc hàm hoặc ở cấp độ mô-đun (khối mã cấp cao nhất). Nếu một tên bị ràng buộc trong một khối, thì đó là một biến cục bộ của khối đó, trừ khi được khai báo là i = 10 def f(): print(i) i = 42 f()5 hoặc i = 10 def f(): print(i) i = 42 f()6. Nếu một tên bị ràng buộc ở cấp độ mô -đun, thì đó là một biến toàn cầu. (Các biến của khối mã mô -đun là cục bộ và toàn cầu.) Nếu một biến được sử dụng trong khối mã nhưng không được xác định ở đó, thì đó là một biến miễn phí. Mỗi lần xuất hiện một tên trong văn bản chương trình đề cập đến sự ràng buộc của tên đó được thiết lập bởi các quy tắc độ phân giải tên sau. 4.2.2. Nghị quyết tênResolution of names¶Một phạm vi xác định khả năng hiển thị của một tên trong một khối. Nếu một biến cục bộ được xác định trong một khối, phạm vi của nó bao gồm khối đó. Nếu định nghĩa xảy ra trong một khối hàm, phạm vi sẽ mở rộng đến bất kỳ khối nào có trong phạm vi xác định, trừ khi một khối chứa giới thiệu một ràng buộc khác cho tên. Khi một tên được sử dụng trong một khối mã, nó được giải quyết bằng cách sử dụng phạm vi bao quanh gần nhất. Tập hợp tất cả các phạm vi như vậy có thể nhìn thấy với một khối mã được gọi là môi trường khối. Khi một cái tên hoàn toàn không được tìm thấy, một ngoại lệ i = 10 def f(): print(i) i = 42 f()7 được nêu ra. Nếu phạm vi hiện tại là phạm vi hàm và tên đề cập đến một biến cục bộ chưa bị ràng buộc với một giá trị tại điểm sử dụng tên, một ngoại lệ i = 10 def f(): print(i) i = 42 f()8 được nêu ra. i = 10 def f(): print(i) i = 42 f()8 là một lớp con của i = 10 def f(): print(i) i = 42 f()7. Nếu một thao tác ràng buộc tên xảy ra ở bất cứ đâu trong một khối mã, tất cả việc sử dụng tên trong khối được coi là tham chiếu đến khối hiện tại. Điều này có thể dẫn đến lỗi khi một tên được sử dụng trong một khối trước khi nó bị ràng buộc. Quy tắc này là tinh tế. Python thiếu khai báo và cho phép các hoạt động liên kết tên xảy ra ở bất cứ đâu trong một khối mã. Các biến cục bộ của khối mã có thể được xác định bằng cách quét toàn bộ văn bản của khối cho các hoạt động liên kết tên. Nếu câu lệnh i = 10 def f(): print(i) i = 42 f()6 xảy ra trong một khối, tất cả việc sử dụng các tên được chỉ định trong câu lệnh đề cập đến các ràng buộc của các tên đó trong không gian tên cấp cao nhất. Tên được giải quyết trong không gian tên cấp cao nhất bằng cách tìm kiếm không gian tên toàn cầu, tức là không gian tên của mô-đun chứa khối mã và không gian tên xây dựng, không gian tên của mô-đun -c 2. Không gian tên toàn cầu được tìm kiếm đầu tiên. Nếu các tên không được tìm thấy ở đó, không gian tên tích hợp được tìm kiếm. Tuyên bố i = 10 def f(): print(i) i = 42 f()6 phải đi trước tất cả việc sử dụng các tên được liệt kê. Câu lệnh i = 10 def f(): print(i) i = 42 f()6 có phạm vi giống như hoạt động liên kết tên trong cùng một khối. Nếu phạm vi bao quanh gần nhất cho một biến miễn phí chứa một tuyên bố toàn cầu, biến miễn phí được coi là toàn cầu. Câu lệnh i = 10 def f(): print(i) i = 42 f()5 gây ra các tên tương ứng để chỉ các biến bị ràng buộc trước đó trong phạm vi hàm bao quanh gần nhất. -c 6 được nêu vào thời điểm biên dịch nếu tên đã cho không tồn tại trong bất kỳ phạm vi chức năng kèm theo nào.Không gian tên cho một mô -đun được tự động tạo ngay lần đầu tiên một mô -đun được nhập. Mô -đun chính cho một tập lệnh luôn được gọi là Các khối định nghĩa lớp và các đối số cho class A: a = 42 b = list(a + i for i in range(10)) 4.2.3. Xây dựng và thực thi hạn chếBuiltins and restricted execution¶Chi tiết triển khai CPython: Người dùng không nên chạm vào i = 10 def f(): print(i) i = 42 f()1 the -c 2 module and modify its attributes appropriately.Không gian tên tích hợp liên quan đến việc thực hiện một khối mã thực sự được tìm thấy bằng cách tìm kiếm tên 4.2.4. Tương tác với các tính năng độngInteraction with dynamic features¶Độ phân giải tên của các biến miễn phí xảy ra tại thời gian chạy, không phải tại thời điểm biên dịch. Điều này có nghĩa là mã sau sẽ in 42: i = 10 def f(): print(i) i = 42 f() Các hàm 4.3. Ngoại lệ haExceptions¶Các trường hợp ngoại lệ là một phương tiện để thoát ra khỏi luồng kiểm soát thông thường của một khối mã để xử lý các lỗi hoặc các điều kiện đặc biệt khác. Một ngoại lệ được nêu ra tại điểm phát hiện lỗi; Nó có thể được xử lý bởi khối mã xung quanh hoặc bởi bất kỳ khối mã nào trực tiếp hoặc gián tiếp gọi khối mã nơi xảy ra lỗi. Trình thông dịch Python nêu ra một ngoại lệ khi nó phát hiện lỗi thời gian chạy (chẳng hạn như Division theo 0). Một chương trình Python cũng có thể nêu rõ một ngoại lệ với tuyên bố i = 10 def f(): print(i) i = 42 f()0. Điều khoản -m 6 của một câu lệnh như vậy có thể được sử dụng để chỉ định mã dọn dẹp không xử lý ngoại lệ, nhưng được thực thi cho dù ngoại lệ có xảy ra hay không trong mã trước.Python sử dụng mô hình xử lý lỗi của người Hồi mã từ đầu). Khi một ngoại lệ hoàn toàn không được xử lý, thông dịch viên chấm dứt thực thi chương trình hoặc trở về vòng lặp chính tương tác của nó. Trong cả hai trường hợp, nó in một dấu vết ngăn xếp, ngoại trừ khi ngoại lệ là Các trường hợp ngoại lệ được xác định bởi các trường hợp lớp. Điều khoản i = 10 def f(): print(i) i = 42 f()0 được chọn tùy thuộc vào lớp của phiên bản: nó phải tham chiếu lớp của phiên bản hoặc lớp cơ sở không phải là người Virtual. Ví dụ có thể được nhận bởi người xử lý và có thể mang thêm thông tin về tình trạng đặc biệt.non-virtual base class thereof. The instance can be received by the handler and can carry additional information about the exceptional condition. Ghi chú Tin nhắn ngoại lệ không phải là một phần của API Python. Nội dung của chúng có thể thay đổi từ một phiên bản Python sang phiên bản tiếp theo mà không cần cảnh báo và không nên dựa vào mã sẽ chạy theo nhiều phiên bản của trình thông dịch. Xem thêm mô tả của câu lệnh Chú thích 1Giới hạn này xảy ra vì mã được thực thi bởi các hoạt động này không có sẵn tại thời điểm mô -đun được biên dịch. |