Hướng dẫn what is code block in python with example? - ví dụ khối mã trong python là gì?

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 -c] là một khối mã. Một mô -đun chạy dưới dạng tập lệnh cấp cao nhất [dưới dạng mô -đun __main__] từ dòng lệnh sử dụng đối số -m cũng là một khối mã. Đối số chuỗi được truyền cho các hàm tích hợp eval[]exec[] là một khối mã.

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:

  • các tham số chính thức cho các chức năng,

  • Định nghĩa lớp học,

  • định nghĩa chức năng,

  • Biểu thức chuyển nhượng,

  • Các mục tiêu là định danh nếu xảy ra trong một bài tập: that are identifiers if occurring in an assignment:

    • for Tiêu đề vòng lặp,

    • Sau as trong một câu lệnh with, mệnh đề

      i = 10
      def f[]:
          print[i]
      i = 42
      f[]
      
      0, mệnh đề
      i = 10
      def f[]:
          print[i]
      i = 42
      f[]
      
      1 hoặc trong mô hình AS trong kết hợp mô hình kết cấu,

    • Trong một mô hình chụp trong kết hợp mô hình cấu trúc

  • i = 10
    def f[]:
        print[i]
    i = 42
    f[]
    
    2 Báo cáo.

Câu lệnh

i = 10
def f[]:
    print[i]
i = 42
f[]
2 của mẫu
i = 10
def f[]:
    print[i]
i = 42
f[]
4 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[]
5 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[]
6 hoặc
i = 10
def f[]:
    print[i]
i = 42
f[]
7. 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[]
8 đượ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[]
9 được nêu ra.
i = 10
def f[]:
    print[i]
i = 42
f[]
9 là một lớp con của
i = 10
def f[]:
    print[i]
i = 42
f[]
8.

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[]
7 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 -c3. 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[]
7 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[]
7 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[]
6 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. -c7 đượ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à __main__.

Các khối định nghĩa lớp và các đối số cho exec[]eval[] rất đặc biệt trong bối cảnh độ phân giải tên. Định nghĩa lớp là một câu lệnh thực thi có thể sử dụng và xác định tên. Các tài liệu tham khảo này tuân theo các quy tắc bình thường để giải quyết tên với một ngoại lệ là các biến cục bộ không liên kết được tra cứu trong không gian tên toàn cầu. Không gian tên của định nghĩa lớp trở thành từ điển thuộc tính của lớp. Phạm vi của các tên được xác định trong một khối lớp được giới hạn trong khối lớp; Nó không mở rộng đến các khối mã của các phương thức - điều này bao gồm các biểu thức toàn diện và trình tạo vì chúng được triển khai bằng phạm vi hàm. Điều này có nghĩa là những điều sau đây sẽ thất bại:

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 __main__1; Nó hoàn toàn là một chi tiết thực hiện. Người dùng muốn ghi đè các giá trị trong không gian tên tích hợp nên

i = 10
def f[]:
    print[i]
i = 42
f[]
2 Mô -đun -c3 và sửa đổi các thuộc tính của nó một cách thích hợp. Users should not touch __main__1; it is strictly an implementation detail. Users wanting to override values in the builtins namespace should
i = 10
def f[]:
    print[i]
i = 42
f[]
2 the -c3 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 __main__1 trong không gian tên toàn cầu của nó; Đây phải là một từ điển hoặc một mô -đun [trong trường hợp sau, từ điển mô -đun được sử dụng]. Theo mặc định, khi trong mô-đun __main__, __main__1 là mô-đun tích hợp -c3; Khi trong bất kỳ mô -đun nào khác, __main__1 là bí danh cho từ điển của mô -đun -c3.

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 eval[]exec[] không có quyền truy cập vào môi trường đầy đủ để giải quyết tên. Tên có thể được giải quyết trong các không gian tên địa phương và toàn cầu của người gọi. Các biến miễn phí không được giải quyết trong không gian tên kèm theo gần nhất, nhưng trong không gian tên toàn cầu. 1 Các hàm exec[]eval[] có các đối số tùy chọn để ghi đè không gian tên toàn cầu và địa phương. Nếu chỉ có một không gian tên được chỉ định, nó được sử dụng cho cả hai.

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ố -m4. Trình xử lý ngoại lệ được chỉ định với câu lệnh -m5 ____ ____10. Điều khoản -m7 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 Viking: một trình xử lý ngoại lệ có thể tìm hiểu những gì đã xảy ra và tiếp tục thực hiện ở cấp độ bên ngoài, nhưng nó không thể sửa chữa nguyên nhân của lỗi và thử lại hoạt động không thành công 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à -m8.

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 -m5 trong phần Câu lệnh thử và câu lệnh -m4 trong phần Tuyên bố RAISE.The try statement and -m4 statement in section The raise statement.

Chú thích

1

Giớ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.

Ví dụ khối mã là gì?

Ví dụ về mã khối là mã solomon sậy, mã Hamming, mã Hadamard, mã mở rộng, mã golay và mã muller sậy.Những ví dụ này cũng thuộc nhóm mã tuyến tính và do đó chúng được gọi là mã khối tuyến tính.Reed–Solomon codes, Hamming codes, Hadamard codes, Expander codes, Golay codes, and Reed–Muller codes. These examples also belong to the class of linear codes, and hence they are called linear block codes.

Khối mã có nghĩa là gì?

Trong lập trình máy tính, một khối hoặc khối mã hoặc khối mã là cấu trúc từ vựng của mã nguồn được nhóm lại với nhau.Các khối bao gồm một hoặc nhiều tuyên bố và tuyên bố.a lexical structure of source code which is grouped together. Blocks consist of one or more declarations and statements.

Bài Viết Liên Quan

Chủ Đề