Mệnh đề trong python là gì

Câu lệnh ghép chứa (nhóm) câu lệnh khác; . Nói chung, các câu lệnh ghép kéo dài trên nhiều dòng, mặc dù trong các phiên bản đơn giản, toàn bộ câu lệnh ghép có thể được chứa trong một dòng

Các câu lệnh , và triển khai các cấu trúc luồng điều khiển truyền thống. chỉ định trình xử lý ngoại lệ và/hoặc mã dọn dẹp cho một nhóm câu lệnh. Các định nghĩa hàm và lớp cũng là các câu lệnh ghép về mặt cú pháp

Câu lệnh ghép bao gồm một hoặc nhiều mệnh đề. ' Một mệnh đề bao gồm một tiêu đề và một 'bộ. ' Các tiêu đề mệnh đề của một câu lệnh ghép cụ thể đều ở cùng một mức thụt đầu dòng. Mỗi tiêu đề mệnh đề bắt đầu bằng một từ khóa xác định duy nhất và kết thúc bằng dấu hai chấm. Một bộ là một nhóm các câu lệnh được điều khiển bởi một mệnh đề. Một bộ có thể là một hoặc nhiều câu lệnh đơn giản được phân tách bằng dấu chấm phẩy trên cùng một dòng với tiêu đề, theo sau dấu hai chấm của tiêu đề hoặc nó có thể là một hoặc nhiều câu lệnh thụt lề trên các dòng tiếp theo. Chỉ dạng bộ sau mới có thể chứa các câu lệnh ghép lồng nhau;

if test1: if test2: print x

Cũng lưu ý rằng dấu chấm phẩy liên kết chặt chẽ hơn dấu hai chấm trong ngữ cảnh này, do đó, trong ví dụ sau, tất cả hoặc không có câu lệnh nào được thực thi

if x < y < z: print x; print y; print z

tổng kết

compound_stmt ::=  if_stmt
                   | while_stmt
                   | for_stmt
                   | try_stmt
                   | with_stmt
                   | funcdef
                   | classdef
                   | decorated
suite         ::=  stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement     ::=  stmt_list NEWLINE | compound_stmt
stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]

Lưu ý rằng các câu lệnh luôn kết thúc bằng NEWLINE có thể theo sau bởi DEDENT. Also note that optional continuation clauses always begin with a keyword that cannot start a statement, thus there are no ambiguities (the ‘dangling ‘ problem is solved in Python by requiring nested statements to be indented).

Định dạng của các quy tắc ngữ pháp trong các phần sau đặt mỗi mệnh đề trên một dòng riêng biệt cho rõ ràng

7. 1. tuyên bố

Câu lệnh được sử dụng để thực hiện có điều kiện

if_stmt ::=  "if" expression ":" suite
             ( "elif" expression ":" suite )*
             ["else" ":" suite]

Nó chọn chính xác một trong các bộ bằng cách đánh giá từng biểu thức một cho đến khi một biểu thức được tìm thấy là đúng (xem phần định nghĩa đúng và sai); . Nếu tất cả các biểu thức là sai, bộ mệnh đề, nếu có, được thực thi

7. 2. tuyên bố

Câu lệnh được sử dụng để thực hiện lặp lại miễn là một biểu thức là đúng

while_stmt ::=  "while" expression ":" suite
                ["else" ":" suite]

Điều này lặp đi lặp lại kiểm tra biểu thức và, nếu nó đúng, sẽ thực thi bộ đầu tiên;

Một câu lệnh được thực thi trong bộ đầu tiên sẽ kết thúc vòng lặp mà không thực thi bộ của mệnh đề. Một câu lệnh được thực hiện trong bộ đầu tiên bỏ qua phần còn lại của bộ và quay lại kiểm tra biểu thức

7. 3. tuyên bố

Câu lệnh được sử dụng để lặp qua các phần tử của chuỗi (chẳng hạn như chuỗi, bộ dữ liệu hoặc danh sách) hoặc đối tượng có thể lặp khác

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]

Danh sách biểu thức được đánh giá một lần; . Trình vòng lặp được tạo cho kết quả của express_list . Sau đó, bộ này được thực thi một lần cho mỗi mục được cung cấp bởi trình vòng lặp, theo thứ tự các chỉ số tăng dần. Lần lượt từng mục được gán cho danh sách đích bằng cách sử dụng các quy tắc chuẩn cho phép gán, sau đó bộ phần mềm được thực thi. Khi các mục đã hết (tức là ngay khi chuỗi trống), bộ trong mệnh đề, nếu có, sẽ được thực thi và vòng lặp kết thúc.

Một câu lệnh được thực thi trong bộ đầu tiên sẽ kết thúc vòng lặp mà không thực thi bộ của mệnh đề. Một câu lệnh được thực hiện trong bộ đầu tiên sẽ bỏ qua phần còn lại của bộ và tiếp tục với mục tiếp theo hoặc với mệnh đề nếu không có mục tiếp theo

Bộ có thể gán cho (các) biến trong danh sách mục tiêu;

Danh sách mục tiêu không bị xóa khi vòng lặp kết thúc, nhưng nếu chuỗi trống, nó sẽ không được vòng lặp chỉ định. Gợi ý. hàm tích hợp trả về một chuỗi các số nguyên phù hợp để mô phỏng hiệu ứng của Pascal for i . = a đến b làm . g. , range(3) trả về danh sách [0, 1,< . 2].

Ghi chú

Có một sự tinh tế khi trình tự đang được sửa đổi bởi vòng lặp (điều này chỉ có thể xảy ra đối với các trình tự có thể thay đổi, tôi. e. danh sách). Bộ đếm nội bộ được sử dụng để theo dõi mục nào được sử dụng tiếp theo và điều này được tăng lên trên mỗi lần lặp lại. Khi bộ đếm này đã đạt đến độ dài của chuỗi, vòng lặp kết thúc. Điều này có nghĩa là nếu bộ xóa mục hiện tại (hoặc mục trước đó) khỏi chuỗi, thì mục tiếp theo sẽ bị bỏ qua (vì nó lấy chỉ mục của mục hiện tại đã được xử lý). Tương tự như vậy, nếu bộ chèn một mục trong chuỗi trước mục hiện tại, mục hiện tại sẽ được xử lý lại vào lần tiếp theo thông qua vòng lặp. Điều này có thể dẫn đến các lỗi khó chịu có thể tránh được bằng cách tạo một bản sao tạm thời bằng cách sử dụng một lát của toàn bộ chuỗi, e. g. ,

for x in a[:]:
    if x < 0: a.remove(x)

7. 4. tuyên bố

Câu lệnh chỉ định trình xử lý ngoại lệ và/hoặc mã dọn dẹp cho một nhóm câu lệnh

try_stmt  ::=  try1_stmt | try2_stmt
try1_stmt ::=  "try" ":" suite
               ("except" [expression [("as" | ",") target]] ":" suite)+
               ["else" ":" suite]
               ["finally" ":" suite]
try2_stmt ::=  "try" ":" suite
               "finally" ":" suite

Đã thay đổi trong phiên bản 2. 5. Trong các phiên bản trước của Python,. đã không làm việc. . phải được lồng vào.

(Các) mệnh đề chỉ định một hoặc nhiều trình xử lý ngoại lệ. Khi không có ngoại lệ xảy ra trong mệnh đề, không có trình xử lý ngoại lệ nào được thực thi. Khi một ngoại lệ xảy ra trong bộ ứng dụng, quá trình tìm kiếm một trình xử lý ngoại lệ sẽ được bắt đầu. Tìm kiếm này lần lượt kiểm tra các mệnh đề ngoại trừ cho đến khi tìm thấy một mệnh đề phù hợp với ngoại lệ. Một mệnh đề ngoại trừ biểu thức, nếu có, phải ở cuối; . Đối với một mệnh đề ngoại trừ có một biểu thức, biểu thức đó được ước tính và mệnh đề khớp với ngoại lệ nếu đối tượng kết quả là "tương thích" với ngoại lệ. Một đối tượng tương thích với một ngoại lệ nếu nó là lớp hoặc lớp cơ sở của đối tượng ngoại lệ, một bộ chứa một mục tương thích với ngoại lệ, hoặc, trong trường hợp (không dùng nữa) của ngoại lệ chuỗi, là chính chuỗi được nâng lên (lưu ý . e. nó phải là cùng một đối tượng chuỗi, không chỉ là một chuỗi có cùng giá trị)

Nếu không có mệnh đề ngoại lệ khớp với ngoại lệ, việc tìm kiếm trình xử lý ngoại lệ sẽ tiếp tục trong mã xung quanh và trên ngăn xếp lời gọi.

Nếu việc đánh giá một biểu thức trong tiêu đề của một mệnh đề ngoại trừ làm phát sinh một ngoại lệ, thì quá trình tìm kiếm trình xử lý ban đầu bị hủy bỏ và bắt đầu tìm kiếm ngoại lệ mới trong mã xung quanh và trên ngăn xếp cuộc gọi (nó được coi như thể toàn bộ

Khi tìm thấy một mệnh đề ngoại trừ phù hợp, ngoại lệ được gán cho mục tiêu được chỉ định trong mệnh đề ngoại trừ đó, nếu có và bộ của mệnh đề ngoại trừ được thực thi. Tất cả các mệnh đề ngoại trừ phải có một khối thực thi. Khi kết thúc khối này, việc thực thi tiếp tục bình thường sau toàn bộ câu lệnh try. (Điều này có nghĩa là nếu tồn tại hai trình xử lý lồng nhau cho cùng một ngoại lệ và ngoại lệ xảy ra trong mệnh đề try của trình xử lý bên trong, thì trình xử lý bên ngoài sẽ không xử lý ngoại lệ đó. )

Trước khi bộ điều khoản ngoại lệ được thực thi, thông tin chi tiết về ngoại lệ được gán cho ba biến trong mô-đun. sys. exc_type nhận đối tượng xác định ngoại lệ; . exc_value sys.exc_value nhận tham số của ngoại lệ; . exc_traceback sys.exc_traceback nhận một đối tượng truy nguyên (xem phần ) xác định điểm trong chương trình xảy ra ngoại lệ. Những thông tin chi tiết này cũng có sẵn thông qua hàm trả về một bộ giá trị (exc_type, exc_value, exc_traceback). Use of the corresponding variables is deprecated in favor of this function, since their use is unsafe in a threaded program. As of Python 1.5, the variables are restored to their previous values (before the call) when returning from a function that handled an exception.

Mệnh đề tùy chọn được thực thi nếu và khi điều khiển chảy ra khỏi phần cuối của mệnh đề. Các ngoại lệ trong mệnh đề không được xử lý bởi các mệnh đề trước

Nếu có, nó chỉ định trình xử lý 'dọn dẹp'. Mệnh đề được thực hiện, bao gồm mệnh đề any và mệnh đề. Nếu một ngoại lệ xảy ra trong bất kỳ mệnh đề nào và không được xử lý, thì ngoại lệ đó sẽ được lưu tạm thời. Mệnh đề được thực hiện. Nếu có một ngoại lệ đã lưu, nó sẽ được nêu lại ở cuối mệnh đề. Nếu mệnh đề đưa ra một ngoại lệ khác hoặc thực thi một câu lệnh hoặc, thì ngoại lệ đã lưu sẽ bị mất. Thông tin ngoại lệ không có sẵn cho chương trình trong khi thực hiện mệnh đề

Khi một câu lệnh , hoặc được thực thi trong bộ một. tuyên bố, mệnh đề cũng được thực hiện 'trên đường ra. ' Một tuyên bố là bất hợp pháp trong điều khoản. (Lý do là có vấn đề với việc triển khai hiện tại — hạn chế này có thể được dỡ bỏ trong tương lai)

Thông tin bổ sung về ngoại lệ có thể được tìm thấy trong phần và thông tin về cách sử dụng câu lệnh để tạo ngoại lệ có thể được tìm thấy trong phần

7. 5. tuyên bố

Mới trong phiên bản 2. 5

Câu lệnh được sử dụng để bọc việc thực thi một khối bằng các phương thức được xác định bởi trình quản lý bối cảnh (xem phần ). Điều này cho phép chung. các mẫu sử dụng được đóng gói để tái sử dụng thuận tiện

________số 8

Việc thực hiện câu lệnh với một "mục" tiến hành như sau

  1. Biểu thức ngữ cảnh (biểu thức được đưa ra trong) được đánh giá để có được trình quản lý ngữ cảnh

  2. Trình quản lý bối cảnh được tải để sử dụng sau

  3. Phương thức của trình quản lý bối cảnh được gọi

  4. Nếu một mục tiêu được bao gồm trong câu lệnh, giá trị trả về từ được gán cho nó

    Ghi chú

    Câu lệnh đảm bảo rằng nếu phương thức trả về không có lỗi thì sẽ luôn được gọi. Do đó, nếu một lỗi xảy ra trong quá trình gán cho danh sách đích, nó sẽ được xử lý giống như một lỗi xảy ra trong bộ sẽ được xử lý. Xem bước 6 bên dưới

  5. Bộ được thực hiện

  6. Phương thức của trình quản lý bối cảnh được gọi. Nếu một ngoại lệ khiến bộ phần mềm bị thoát, thì loại, giá trị và dấu vết của nó sẽ được chuyển thành đối số cho. Mặt khác, ba đối số được cung cấp

    Nếu bộ phần mềm đã bị thoát do một ngoại lệ và giá trị trả về từ phương thức là sai, thì ngoại lệ đó sẽ được kích hoạt lại. Nếu giá trị trả về là true, ngoại lệ sẽ bị chặn và quá trình thực thi tiếp tục với câu lệnh theo sau câu lệnh

    Nếu bộ phần mềm đã bị thoát vì bất kỳ lý do nào khác ngoài ngoại lệ, thì giá trị trả về từ sẽ bị bỏ qua và quá trình thực thi sẽ tiếp tục ở vị trí bình thường đối với loại lần thoát đã được thực hiện

Với nhiều mục, trình quản lý ngữ cảnh được xử lý như thể nhiều câu lệnh được lồng vào nhau

with A() as a, B() as b:
    suite

tương đương với

if x < y < z: print x; print y; print z
0

Ghi chú

Trong Python 2. 5, câu lệnh chỉ được phép khi tính năng with_statement đã được bật. Nó luôn được kích hoạt trong Python 2. 6.

Đã thay đổi trong phiên bản 2. 7. Hỗ trợ nhiều biểu thức ngữ cảnh.

Xem thêm

PEP 0343 - Câu lệnh “với” Thông số kỹ thuật, nền tảng và ví dụ cho câu lệnh Python

7. 6. định nghĩa chức năng

Một định nghĩa hàm định nghĩa một đối tượng hàm do người dùng định nghĩa (xem phần )

if x < y < z: print x; print y; print z
1

Một định nghĩa hàm là một câu lệnh thực thi. Việc thực thi của nó liên kết tên hàm trong không gian tên cục bộ hiện tại với một đối tượng hàm (một trình bao bọc xung quanh mã thực thi cho hàm). Đối tượng hàm này chứa tham chiếu đến không gian tên chung hiện tại làm không gian tên chung sẽ được sử dụng khi hàm được gọi

Định nghĩa hàm không thực thi thân hàm; .

Một định nghĩa hàm có thể được bao bọc bởi một hoặc nhiều biểu thức. Các biểu thức trang trí được đánh giá khi hàm được xác định, trong phạm vi chứa định nghĩa hàm. Kết quả phải là một hàm có thể gọi được, được gọi với đối tượng hàm làm đối số duy nhất. Giá trị trả về được liên kết với tên hàm thay vì đối tượng hàm. Nhiều trang trí được áp dụng theo kiểu lồng nhau. Ví dụ, đoạn mã sau

if x < y < z: print x; print y; print z
2

tương đương với

if x < y < z: print x; print y; print z
3

Khi một hoặc nhiều tham số cấp cao nhất có biểu thức tham số biểu mẫu = , hàm được cho là có “giá trị tham số mặc định. ” Đối với một tham số có giá trị mặc định, đối số tương ứng có thể bị bỏ qua khi gọi, trong trường hợp đó, giá trị mặc định của tham số được thay thế. Nếu một tham số có giá trị mặc định, thì tất cả các tham số sau cũng phải có giá trị mặc định — đây là một hạn chế về cú pháp không được biểu thị bằng ngữ pháp.

Các giá trị tham số mặc định được đánh giá khi định nghĩa hàm được thực thi. Điều này có nghĩa là biểu thức được đánh giá một lần, khi hàm được xác định và cùng một giá trị "được tính toán trước" đó được sử dụng cho mỗi lệnh gọi. Điều này đặc biệt quan trọng để hiểu khi tham số mặc định là đối tượng có thể thay đổi, chẳng hạn như danh sách hoặc từ điển. nếu chức năng sửa đổi đối tượng (e. g. bằng cách thêm một mục vào danh sách), giá trị mặc định có hiệu lực được sửa đổi. Đây thường không phải là những gì đã được dự định. Một cách giải quyết vấn đề này là sử dụng None làm giá trị mặc định và kiểm tra rõ ràng giá trị đó trong phần thân của hàm, e. g.

if x < y < z: print x; print y; print z
4

Ngữ nghĩa cuộc gọi hàm được mô tả chi tiết hơn trong phần. Một lệnh gọi hàm luôn gán giá trị cho tất cả các tham số được đề cập trong danh sách tham số, từ đối số vị trí, từ đối số từ khóa hoặc từ giá trị mặc định. Nếu có dạng “ *identifier ”, nó được khởi tạo thành một bộ nhận bất kỳ tham số vị trí thừa nào, mặc định là bộ trống. Nếu có biểu mẫu “ **identifier ”, nó sẽ được khởi tạo cho một từ điển mới nhận bất kỳ đối số từ khóa thừa nào, mặc định là một từ điển trống mới.

Cũng có thể tạo các hàm ẩn danh (các hàm không bị ràng buộc với tên), để sử dụng ngay trong các biểu thức. Điều này sử dụng các biểu mẫu lambda, được mô tả trong phần. Lưu ý rằng biểu mẫu lambda chỉ là cách viết tắt của định nghĩa hàm được đơn giản hóa; . Biểu mẫu “” thực sự mạnh hơn vì nó cho phép thực hiện nhiều câu lệnh

Ghi chú của lập trình viên. Hàm là đối tượng hạng nhất. Biểu mẫu “ def ” được thực thi bên trong định nghĩa hàm xác định một hàm cục bộ có thể được trả về hoặc chuyển qua xung quanh. Các biến tự do được sử dụng trong hàm lồng nhau có thể truy cập các biến cục bộ của hàm chứa def. Xem phần để biết chi tiết.

7. 7. định nghĩa lớp

Một định nghĩa lớp định nghĩa một đối tượng lớp (xem phần )

if x < y < z: print x; print y; print z
5

Một định nghĩa lớp là một câu lệnh thực thi. Đầu tiên nó đánh giá danh sách thừa kế, nếu có. Mỗi mục trong danh sách thừa kế phải đánh giá một đối tượng lớp hoặc loại lớp cho phép phân lớp. Bộ của lớp sau đó được thực thi trong khung thực thi mới (xem phần ), sử dụng không gian tên cục bộ mới được tạo và không gian tên chung ban đầu. (Thông thường, bộ này chỉ chứa các định nghĩa hàm. ) Khi bộ của lớp kết thúc thực thi, khung thực thi của nó bị loại bỏ nhưng không gian tên cục bộ của nó được lưu. Sau đó, một đối tượng lớp được tạo bằng cách sử dụng danh sách thừa kế cho các lớp cơ sở và không gian tên cục bộ đã lưu cho từ điển thuộc tính. Tên lớp được liên kết với đối tượng lớp này trong không gian tên cục bộ ban đầu

Ghi chú của lập trình viên. Các biến được định nghĩa trong định nghĩa lớp là các biến lớp; . Để tạo các biến thể hiện, chúng có thể được đặt trong một phương thức với self. tên = giá trị . Cả hai biến lớp và đối tượng đều có thể truy cập thông qua ký hiệu “ self. name ”, và một biến thể hiện ẩn một biến lớp có cùng tên khi được truy cập theo cách này. Các biến lớp có thể được sử dụng làm giá trị mặc định cho các biến thể hiện, nhưng việc sử dụng các giá trị có thể thay đổi có thể dẫn đến kết quả không mong muốn. Đối với es, các bộ mô tả có thể được sử dụng để tạo các biến thể hiện với các chi tiết triển khai khác nhau.

Định nghĩa lớp, như định nghĩa hàm, có thể được bao bọc bởi một hoặc nhiều biểu thức. Các quy tắc đánh giá cho các biểu thức trang trí cũng giống như các hàm. Kết quả phải là một đối tượng lớp, sau đó được liên kết với tên lớp

Mệnh đề with hoạt động như thế nào trong Python?

Trong Python, câu lệnh with thay thế khối try-catch bằng một tốc ký ngắn gọn . Quan trọng hơn, nó đảm bảo đóng tài nguyên ngay sau khi xử lý chúng. Một ví dụ phổ biến về việc sử dụng câu lệnh with là đọc hoặc ghi vào một tệp. Một hàm hoặc lớp hỗ trợ câu lệnh with được gọi là trình quản lý ngữ cảnh.

3 câu điều kiện trong Python là gì?

Sau đây là các câu điều kiện do Python cung cấp. .
nếu. khác
Lồng nhau nếu
câu lệnh if-elif

Cú pháp trong Python với ví dụ là gì?

Cú pháp của ngôn ngữ lập trình Python là tập hợp các quy tắc xác định cách viết chương trình Python . Cấu trúc dòng Python. Một chương trình Python được chia thành một số dòng logic và mỗi dòng logic được kết thúc bằng mã thông báo NEWLINE. Một dòng logic được tạo từ một hoặc nhiều dòng vật lý.

Biểu thức điều kiện trong Python là gì?

Biểu thức điều kiện trong Python là một biểu thức (nói cách khác, một đoạn mã đánh giá một kết quả) có giá trị phụ thuộc vào một điều kiện.