Hướng dẫn what is complex statements in python? - câu lệnh phức tạp trong python là gì?

Phương thức phức tạp () trả về một số phức khi các bộ phận thực và tưởng tượng được cung cấp hoặc nó chuyển đổi một chuỗi thành một số phức.

Show

Cú pháp của

if test1: if test2: print(x)
4 là:

complex([real[, imag]])

các tham số phức tạp ()

Nói chung, phương thức

if test1: if test2: print(x)
4 có hai tham số:

  • THỰC SỰ - PHẦN THỰC SỰ. Nếu Real bị bỏ qua, nó mặc định là 0. - real part. If real is omitted, it defaults to 0.
  • Hình ảnh - Phần tưởng tượng. Nếu hình ảnh bị bỏ qua, nó mặc định là 0. - imaginary part. If imag is omitted, it defaults to 0.

Nếu tham số đầu tiên được truyền vào phương thức này là một chuỗi, nó sẽ được hiểu là một số phức. Trong trường hợp này, tham số thứ hai không nên được thông qua.


Trả về giá trị từ phức tạp ()

Theo đề xuất của tên, phương thức

if test1: if test2: print(x)
4 trả về một số phức.

Nếu chuỗi được truyền vào phương thức này không phải là một số phức hợp hợp lệ, ngoại lệ

if test1: if test2: print(x)
7 sẽ được nâng lên.

Lưu ý: Chuỗi được chuyển cho

if test1: if test2: print(x)
4 phải ở dạng
if test1: if test2: print(x)
9 hoặc
if x < y < z: print(x); print(y); print(z)
0
The string passed to
if test1: if test2: print(x)
4 should be in the form
if test1: if test2: print(x)
9 or
if x < y < z: print(x); print(y); print(z)
0


Ví dụ 1: Làm thế nào để tạo một số phức tạp trong Python?

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)

Đầu ra

(2-3j)
(1+0j)
0j
(5-9j)

Ví dụ 2: Tạo số phức mà không sử dụng phức tạp ()

Có thể tạo một số phức mà không cần sử dụng phương thức

if test1: if test2: print(x)
4. Đối với điều đó, bạn phải đặt 'j' hoặc 'j' sau một số.

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))

Đầu ra

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>

Một số phức được tạo từ các số thực. Số phức Python có thể được tạo bằng cách sử dụng câu lệnh gán trực tiếp hoặc bằng cách sử dụng hàm phức tạp (). Các số phức tạp hầu hết được sử dụng ở nơi chúng tôi đang sử dụng hai số thực.

3 tuyên bố trong Python là gì?

Chủ yếu có bốn loại tuyên bố trong Python, báo cáo in, tuyên bố gán, tuyên bố có điều kiện, câu lệnh lặp. Các câu lệnh in và gán thường được sử dụng.

if test1: if test2: print(x)

Một lớp học phức tạp trong Python là gì?

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

Summarizing:

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

Python Complex () Phương thức phức tạp () trả về một số phức khi các bộ phận thực và tưởng tượng được cung cấp, hoặc nó chuyển đổi một chuỗi thành một số phức. Cú pháp của phức tạp () là: phức tạp ([real [, hình ảnh]]))

Những tuyên bố trong Python là gì?

Một câu lệnh là một hướng dẫn mà trình thông dịch Python có thể thực thi. Chúng tôi đã thấy hai loại tuyên bố: in và gán. Khi bạn nhập một câu lệnh trên dòng lệnh, Python thực hiện nó và hiển thị kết quả, nếu có. Kết quả của một câu lệnh in là một giá trị.The if x < y < z: print(x); print(y); print(z) 2 statement¶

Báo cáo ghép chứa (các nhóm của) các tuyên bố khác; Chúng ảnh hưởng hoặc kiểm soát việc thực hiện các tuyên bố khác theo một cách nào đó. Nói chung, các tuyên bố hợp chất trải rộng nhiều dòng, mặc dù trong các hóa thân đơn giản, toàn bộ tuyên bố ghép có thể được chứa trong một dòng.

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

Các tuyên bố

if x < y < z: print(x); print(y); print(z)
2,
if x < y < z: print(x); print(y); print(z)
3 và
if x < y < z: print(x); print(y); print(z)
4 thực hiện các cấu trúc luồng điều khiển truyền thống.
if x < y < z: print(x); print(y); print(z)
5 Chỉ định trình xử lý ngoại lệ và/hoặc mã dọn dẹp cho một nhóm các câu lệnh, trong khi câu lệnh
if x < y < z: print(x); print(y); print(z)
6 cho phép thực hiện mã khởi tạo và hoàn thiện xung quanh một khối mã. Định nghĩa chức năng và lớp cũng là các câu lệnh hợp chất cú pháp.Boolean operations for the definition of true and false); then that suite is executed (and no other part of the
if x < y < z: print(x); print(y); print(z)
2 statement is executed or evaluated). If all expressions are false, the suite of the
if x < y < z: print(x); print(y); print(z)
8 clause, if present, is executed.

8.2. Tuyên bố if x < y < z: print(x); print(y); print(z) 3The if x < y < z: print(x); print(y); print(z) 3 statement¶

Câu lệnh

if x < y < z: print(x); print(y); print(z)
3 được sử dụng để thực hiện lặp đi lặp lại miễn là biểu thức là đúng:

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

Điều này liên tục kiểm tra biểu thức và, nếu đó là sự thật, thực hiện bộ đầu tiên; Nếu biểu thức là sai (có thể là lần đầu tiên nó được kiểm tra), bộ của mệnh đề

if x < y < z: print(x); print(y); print(z)
8, nếu có, sẽ được thực thi và vòng lặp chấm dứt.

Một câu lệnh

if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
1 được thực thi trong bộ đầu tiên chấm dứt vòng lặp mà không cần thực thi bộ điều khoản
if x < y < z: print(x); print(y); print(z)
8. Một câu lệnh
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3 đượ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.

8.3. Tuyên bố if x < y < z: print(x); print(y); print(z) 4The if x < y < z: print(x); print(y); print(z) 4 statement¶

Câu lệnh

if x < y < z: print(x); print(y); print(z)
4 được sử dụng để lặp lại các phần tử của chuỗi (như chuỗi, tuple hoặc danh sách) hoặc đối tượng có thể lặp lại khác:

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
0

Biểu thức

if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
6 được đánh giá một lần; Nó sẽ mang lại một đối tượng có thể lặp lại. Một iterator được tạo ra cho điều đó có thể. Mục đầu tiên được cung cấp bởi trình lặp sau đó được gán cho danh sách đích bằng cách sử dụng các quy tắc tiêu chuẩn cho các bài tập (xem các câu lệnh gán) và bộ được thực thi. Điều này lặp lại cho mỗi mục được cung cấp bởi người lặp. Khi máy lặp bị kiệt sức, bộ trong mệnh đề
if x < y < z: print(x); print(y); print(z)
8, nếu có, được thực thi và vòng lặp chấm dứt.iterable object. An iterator is created for that iterable. The first item provided by the iterator is then assigned to the target list using the standard rules for assignments (see Assignment statements), and the suite is executed. This repeats for each item provided by the iterator. When the iterator is exhausted, the suite in the
if x < y < z: print(x); print(y); print(z)
8 clause, if present, is executed, and the loop terminates.

Một câu lệnh

if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
1 được thực thi trong bộ đầu tiên chấm dứt vòng lặp mà không cần thực thi bộ điều khoản
if x < y < z: print(x); print(y); print(z)
8. Một câu lệnh
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3 được thực thi trong bộ đầu tiên 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 đề
if x < y < z: print(x); print(y); print(z)
8 nếu không có mục tiếp theo.

Các vòng lặp thực hiện các bài tập cho các biến trong danh sách đích. Điều này ghi đè tất cả các bài tập trước đó cho các biến đó bao gồm các biến được thực hiện trong bộ của vòng lặp:

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
1

Tên trong danh sách đích không bị xóa khi vòng lặp kết thúc, nhưng nếu chuỗi trống, chúng sẽ không được chỉ định cho tất cả các vòng lặp. Gợi ý: Chức năng tích hợp

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
2 trả về một bộ lặp các số nguyên thích hợp để mô phỏng hiệu ứng của Pascal tựa
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
3; ví dụ:
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
4 Trả về danh sách
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
5.

Đã thay đổi trong phiên bản 3.11: Các yếu tố được đóng vai chính hiện được cho phép trong danh sách biểu thức.Starred elements are now allowed in the expression list.

8.4. Tuyên bố if x < y < z: print(x); print(y); print(z) 5The if x < y < z: print(x); print(y); print(z) 5 statement¶

Câu lệnh

if x < y < z: print(x); print(y); print(z)
5 chỉ định trình xử lý ngoại lệ và/hoặc mã dọn dẹp cho một nhóm các câu lệnh:

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
2

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

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
8 để tạo các ngoại lệ có thể được tìm thấy trong phần Tuyên bố nâng cao.Exceptions, and information on using the
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
8 statement to generate exceptions may be found in section The raise statement.

8.4.1. while_stmt ::= "while" assignment_expression ":" suite ["else" ":" suite] 9 mệnh đềwhile_stmt ::= "while" assignment_expression ":" suite ["else" ":" suite] 9 clause¶

Điều khoản

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 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 đề
if x < y < z: print(x); print(y); print(z)
5, 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ộ
if x < y < z: print(x); print(y); print(z)
5, việc tìm kiếm một trình xử lý ngoại lệ đã được bắt đầu. Tìm kiếm này kiểm tra các điều khoản
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 lần lượt cho đến khi một được tìm thấy phù hợp với ngoại lệ. Một mệnh đề
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 không có biểu thức, nếu có, phải là cuối cùng; Nó phù hợp với bất kỳ ngoại lệ. Đối với một mệnh đề
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 có biểu thức, biểu thức đó được đánh giá và mệnh đề phù hợ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 đối tượng là lớp hoặc lớp cơ sở không phải của đối tượng ngoại lệ hoặc một tuple chứa một mục là lớp hoặc lớp cơ sở không phải là đối tượng của đối tượng ngoại lệ.non-virtual base class of the exception object, or a tuple containing an item that is the class or a non-virtual base class of the exception object.

Nếu không có mệnh đề

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 phù hợp với ngoại lệ, việc tìm kiếm một trình xử lý ngoại lệ tiếp tục trong mã xung quanh và trên ngăn xếp gọi. 1

Nếu việc đánh giá một biểu thức trong tiêu đề của mệnh đề

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 sẽ đặt ra một ngoại lệ, thì việc tìm kiếm ban đầu cho một trình xử lý bị hủy và một tìm kiếm bắt đầu cho ngoại lệ mới trong mã xung quanh và trên ngăn xếp cuộc gọi (nó được xử lý như thể toàn bộ Tuyên bố
if x < y < z: print(x); print(y); print(z)
5 đã nêu ra ngoại lệ).

Khi một mệnh đề

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 phù hợp được tìm thấy, ngoại lệ được gán cho mục tiêu được chỉ định sau từ khóa
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
10 trong mệnh đề
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 đó, nếu có và bộ
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 Suite của mệnh đề được thực thi. Tất cả các mệnh đề
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 phải có một khối thực thi. Khi đạt được kết thúc của 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
if x < y < z: print(x); print(y); print(z)
5. .

Khi một ngoại lệ đã được chỉ định bằng cách sử dụng

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
16, nó sẽ được xóa ở cuối điều khoản
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9. Điều này là như thể

đã được dịch sang

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
3

Điều này có nghĩa là ngoại lệ phải được gán cho một tên khác để có thể tham khảo nó sau mệnh đề

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9. Các trường hợp ngoại lệ được xóa bởi vì với dấu vết được gắn vào chúng, chúng tạo thành một chu kỳ tham chiếu với khung ngăn xếp, giữ cho tất cả người dân địa phương trong khung đó tồn tại cho đến khi bộ sưu tập rác tiếp theo xảy ra.

Trước khi bộ điều khoản

while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 được thực thi, chi tiết về ngoại lệ được lưu trữ trong mô -đun
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
20 và có thể được truy cập thông qua
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
21.
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
21 Trả về 3-Tuple bao gồm lớp ngoại lệ, thể hiện ngoại lệ và đối tượng Traceback (xem phần phân cấp loại tiêu chuẩn) xác định điểm trong chương trình xảy ra ngoại lệ. Các chi tiết về ngoại lệ được truy cập qua
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
21 được khôi phục về các giá trị trước đó của chúng khi để lại một trình xử lý ngoại lệ:The standard type hierarchy) identifying the point in the program where the exception occurred. The details about the exception accessed via
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
21 are restored to their previous values when leaving an exception handler:

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
4

8.4.2. z = complex(2, -3) print(z) z = complex(1) print(z) z = complex() print(z) z = complex('5-9j') print(z)24 MURz = complex(2, -3) print(z) z = complex(1) print(z) z = complex() print(z) z = complex('5-9j') print(z)24 clause¶

Điều khoản

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24 được sử dụng để xử lý
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
26S. Loại ngoại lệ để kết hợp được hiểu là trong trường hợp của
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9, nhưng trong trường hợp các nhóm ngoại lệ, chúng ta có thể có các trận đấu một phần khi loại khớp với một số ngoại lệ trong nhóm. Điều này có nghĩa là nhiều mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24 có thể thực thi, mỗi phần xử lý của nhóm ngoại lệ. Mỗi mệnh đề thực hiện nhiều nhất một lần và xử lý một nhóm ngoại lệ của tất cả các ngoại lệ phù hợp. Mỗi ngoại lệ trong nhóm được xử lý nhiều nhất là một mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24, đầu tiên phù hợp với nó.

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
5

Bất kỳ trường hợp ngoại lệ nào còn lại không được xử lý bởi bất kỳ mệnh đề

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24 nào cũng được tăng lại vào cuối, kết hợp thành một nhóm ngoại lệ cùng với tất cả các trường hợp ngoại lệ được nêu ra từ các mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24.

Nếu ngoại lệ được nâng lên không phải là một nhóm ngoại lệ và loại của nó phù hợp với một trong các điều khoản của

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24, thì nó sẽ bị bắt và bao bọc bởi một nhóm ngoại lệ với một chuỗi tin nhắn trống.

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
6

Một mệnh đề

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24 phải có loại phù hợp và loại này không thể là một lớp con của
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
34. Không thể trộn
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 và
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24 trong cùng một
if x < y < z: print(x); print(y); print(z)
5.
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
1,
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3 và
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
40 không thể xuất hiện trong mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
24.

8.4.3. if x < y < z: print(x); print(y); print(z) 8 MUSTER¶if x < y < z: print(x); print(y); print(z) 8 clause¶

Điều khoản

if x < y < z: print(x); print(y); print(z)
8 tùy chọn được thực thi nếu luồng điều khiển rời khỏi bộ
if x < y < z: print(x); print(y); print(z)
5, không có ngoại lệ nào được nêu ra và không có câu lệnh
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
40,
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3 hoặc
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
1 được thực thi. Các trường hợp ngoại lệ trong mệnh đề
if x < y < z: print(x); print(y); print(z)
8 không được xử lý bởi các điều khoản trước đó.

8.4.4. z = complex(2, -3) print(z) z = complex(1) print(z) z = complex() print(z) z = complex('5-9j') print(z)50 mệnh đề Joz = complex(2, -3) print(z) z = complex(1) print(z) z = complex() print(z) z = complex('5-9j') print(z)50 clause¶

Nếu

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 có mặt, nó chỉ định một trình xử lý ’dọn dẹp. Điều khoản
if x < y < z: print(x); print(y); print(z)
5 được thực thi, bao gồm bất kỳ mệnh đề
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9 và
if x < y < z: print(x); print(y); print(z)
8 nào. Nếu một ngoại lệ xảy ra trong bất kỳ mệnh đề nào và không được xử lý, ngoại lệ sẽ được lưu tạm thời. Điều khoản
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 được thực thi. Nếu có một ngoại lệ đã lưu, nó sẽ được nêu lại vào cuối điều khoản
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50. Nếu mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 đặt ra một ngoại lệ khác, ngoại lệ đã lưu được đặt làm bối cảnh của ngoại lệ mới. Nếu mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 thực thi câu lệnh
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
40,
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
1 hoặc
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3, ngoại lệ đã lưu sẽ bị loại bỏ:

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
7

Thông tin ngoại lệ không có sẵn cho chương trình trong quá trình thực hiện mệnh đề

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50.

Khi câu lệnh

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
40,
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
1 hoặc
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3 được thực thi trong bộ
if x < y < z: print(x); print(y); print(z)
5 của câu lệnh ________ 65 ____ 150, mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 cũng được thực thi trên đường ra.

Giá trị trả về của hàm được xác định bởi câu lệnh

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
40 cuối cùng được thực thi. Vì mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 luôn thực thi, một câu lệnh
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
40 được thực thi trong mệnh đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 sẽ luôn là câu lệnh cuối cùng được thực hiện:

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
8

Đã thay đổi trong phiên bản 3.8: Trước Python 3.8, một tuyên bố

if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3 là bất hợp pháp trong điều khoản
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 do một vấn đề với việc thực hiện.Prior to Python 3.8, a
if_stmt ::=  "if" assignment_expression ":" suite
             ("elif" assignment_expression ":" suite)*
             ["else" ":" suite]
3 statement was illegal in the
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 clause due to a problem with the implementation.

8,5. Tuyên bố if x < y < z: print(x); print(y); print(z) 6The if x < y < z: print(x); print(y); print(z) 6 statement¶

Câu lệnh

if x < y < z: print(x); print(y); print(z)
6 được sử dụng để kết thúc việc thực hiện một khối với các phương thức được xác định bởi Trình quản lý ngữ cảnh (xem phần với Trình quản lý bối cảnh câu lệnh). Điều này cho phép ________ 65 65 ____ 99 99 ____ ____ 150 Các mẫu sử dụng được đóng gói để tái sử dụng thuận tiện.With Statement Context Managers). This allows common
if x < y < z: print(x); print(y); print(z)
5…
while_stmt ::=  "while" assignment_expression ":" suite
                ["else" ":" suite]
9…
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
50 usage patterns to be encapsulated for convenient reuse.

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
9

Việc thực hiện câu lệnh

if x < y < z: print(x); print(y); print(z)
6 với một mục của người Viking như sau:

  1. Biểu thức ngữ cảnh (biểu thức được đưa ra trong

    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    82) được đánh giá để có được trình quản lý ngữ cảnh.

  2. Trình quản lý bối cảnh

    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    83 được tải để sử dụng sau.

  3. Trình quản lý bối cảnh

    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    84 được tải để sử dụng sau.

  4. Phương pháp Trình quản lý bối cảnh ____ ____183 được gọi.

  5. Nếu một mục tiêu được đưa vào câu lệnh

    if x < y < z: print(x); print(y); print(z)
    
    6, giá trị trả về từ
    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    83 được gán cho nó.

    Ghi chú

    Câu lệnh

    if x < y < z: print(x); print(y); print(z)
    
    6 đảm bảo rằng nếu phương thức
    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    83 trả về mà không có lỗi, thì
    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    84 sẽ luôn được gọi. Do đó, nếu xảy ra lỗi 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ộ. Xem Bước 6 bên dưới.

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

  7. Phương pháp Trình quản lý bối cảnh ____ ____184 được gọi. Nếu một ngoại lệ khiến bộ công trình bị thoát ra, loại, giá trị và dấu vết của nó được chuyển làm đối số cho

    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    84. Nếu không, ba đối số
    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    93 được cung cấp.

    Nếu bộ được thoát do ngoại lệ và giá trị trả về từ phương thức

    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    84 là sai, thì ngoại lệ sẽ được đọc lại. Nếu giá trị trả về là đúng, ngoại lệ sẽ bị triệt tiêu và việc thực thi tiếp tục với câu lệnh sau câu lệnh
    if x < y < z: print(x); print(y); print(z)
    
    6.

    Nếu bộ được thoát vì bất kỳ lý do nào khác ngoài ngoại lệ, giá trị trả lại từ

    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    84 sẽ bị bỏ qua và tiến hành thực hiện tại vị trí bình thường cho loại thoát được thực hiện.

Mã sau:

(2-3j)
(1+0j)
0j
(5-9j)
0

tương đương về mặt ngữ nghĩa với:

(2-3j)
(1+0j)
0j
(5-9j)
1

Với nhiều hơn một mục, các nhà quản lý ngữ cảnh được xử lý như thể nhiều câu lệnh

if x < y < z: print(x); print(y); print(z)
6 đã được lồng nhau:

(2-3j)
(1+0j)
0j
(5-9j)
2

tương đương về mặt ngữ nghĩa với:

(2-3j)
(1+0j)
0j
(5-9j)
3

Với nhiều hơn một mục, các nhà quản lý ngữ cảnh được xử lý như thể nhiều câu lệnh

if x < y < z: print(x); print(y); print(z)
6 đã được lồng nhau:

(2-3j)
(1+0j)
0j
(5-9j)
4

Bạn cũng có thể viết các trình quản lý bối cảnh nhiều mục trong nhiều dòng nếu các mục được bao quanh bởi dấu ngoặc đơn. Ví dụ:Support for multiple context expressions.

Đã thay đổi trong phiên bản 3.1: Hỗ trợ cho nhiều biểu thức bối cảnh.Support for using grouping parentheses to break the statement in multiple lines.

Đã thay đổi trong phiên bản 3.10: Hỗ trợ sử dụng dấu ngoặc đơn nhóm để phá vỡ câu lệnh trong nhiều dòng.

Xem thêm - The “with” statement

PEP 343 - Tuyên bố với "với"

Đặc điểm kỹ thuật, nền tảng và ví dụ cho câu lệnh Python if x < y < z: print(x); print(y); print(z) 6.The z = complex(2, -3) print(z) z = complex(1) print(z) z = complex() print(z) z = complex('5-9j') print(z)99 statement¶

8.6. Tuyên bố

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
99

Mới trong phiên bản 3.10.

(2-3j)
(1+0j)
0j
(5-9j)
5

Câu lệnh khớp được sử dụng để khớp mẫu. Cú pháp:

  • Kết hợp mẫu lấy một mẫu làm đầu vào (sau

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    00) và giá trị chủ đề (sau
    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    99). Mẫu (có thể chứa các tiểu mẫu) được khớp với giá trị chủ đề. Kết quả là:

  • Thành công hay thất bại phù hợp (cũng gọi là thành công hoặc thất bại mô hình).

Có thể ràng buộc của các giá trị phù hợp với một tên. Các điều kiện tiên quyết cho điều này được thảo luận thêm dưới đây.soft keywords.

Đã thay đổi trong phiên bản 3.10: Hỗ trợ sử dụng dấu ngoặc đơn nhóm để phá vỡ câu lệnh trong nhiều dòng.

  • Xem thêm – Structural Pattern Matching: Specification

  • PEP 343 - Tuyên bố với "với" – Structural Pattern Matching: Tutorial

Đặc điểm kỹ thuật, nền tảng và ví dụ cho câu lệnh Python if x < y < z: print(x); print(y); print(z) 6.Overview¶

8.6. Tuyên bố

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
99

  1. Mới trong phiên bản 3.10.the standard rules.

  2. Câu lệnh khớp được sử dụng để khớp mẫu. Cú pháp:Name bindings made during a successful pattern match outlive the executed block and can be used after the match statement.

    Kết hợp mẫu lấy một mẫu làm đầu vào (sau

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    00) và giá trị chủ đề (sau
    z = complex(2, -3)
    print(z)
    
    z = complex(1)
    print(z)
    
    z = complex()
    print(z)
    
    z = complex('5-9j')
    print(z)
    99). Mẫu (có thể chứa các tiểu mẫu) được khớp với giá trị chủ đề. Kết quả là:

    Thành công hay thất bại phù hợp (cũng gọi là thành công hoặc thất bại mô hình).

  3. Có thể ràng buộc của các giá trị phù hợp với một tên. Các điều kiện tiên quyết cho điều này được thảo luận thêm dưới đây.

    • Từ khóa

      z = complex(2, -3)
      print(z)
      
      z = complex(1)
      print(z)
      
      z = complex()
      print(z)
      
      z = complex('5-9j')
      print(z)
      99 và
      (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      00 là từ khóa mềm.

    • PEP 634 - Kết hợp mô hình cấu trúc: Đặc điểm kỹ thuật

    • PEP 636 - Phù hợp với mô hình cấu trúc: Hướng dẫn

Kết hợp mẫu lấy một mẫu làm đầu vào (sau

(2-3j)
(1+0j)
0j
(5-9j)
00) và giá trị chủ đề (sau
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
99). Mẫu (có thể chứa các tiểu mẫu) được khớp với giá trị chủ đề. Kết quả là:

Thành công hay thất bại phù hợp (cũng gọi là thành công hoặc thất bại mô hình).

Có thể ràng buộc của các giá trị phù hợp với một tên. Các điều kiện tiên quyết cho điều này được thảo luận thêm dưới đây.

(2-3j)
(1+0j)
0j
(5-9j)
6

Từ khóa

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
99 và
(2-3j)
(1+0j)
0j
(5-9j)
00 là từ khóa mềm.

PEP 634 - Kết hợp mô hình cấu trúc: Đặc điểm kỹ thuậtGuards¶

(2-3j)
(1+0j)
0j
(5-9j)
7

PEP 636 - Phù hợp với mô hình cấu trúc: Hướng dẫn

8.6.1. Tổng quan¶

  1. Ở đây, một cái nhìn tổng quan về luồng logic của câu lệnh khớp:

  2. Biểu thức đối tượng

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    04 được đánh giá và giá trị chủ thể thu được. Nếu biểu thức chủ đề chứa dấu phẩy, một tuple được xây dựng bằng các quy tắc tiêu chuẩn.

    • Mỗi mẫu trong

      (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      05 được cố gắng khớp với giá trị chủ đề. Các quy tắc cụ thể để thành công hoặc thất bại được mô tả dưới đây. Nỗ lực trận đấu cũng có thể liên kết một số hoặc tất cả các tên độc lập trong mẫu. Các quy tắc ràng buộc mẫu chính xác khác nhau cho mỗi loại mẫu và được chỉ định dưới đây. Tên các ràng buộc được thực hiện trong một mô hình thành công OVERIVE BLOCK được thực hiện và có thể được sử dụng sau câu lệnh khớp.

    • Ghi chú

    • Trong các kết hợp mô hình thất bại, một số nhà mạng có thể thành công. Không dựa vào các ràng buộc được thực hiện cho một trận đấu thất bại. Ngược lại, không dựa vào các biến không thay đổi sau khi kết hợp thất bại. Hành vi chính xác phụ thuộc vào việc thực hiện và có thể khác nhau. Đây là một quyết định có chủ ý được thực hiện để cho phép các triển khai khác nhau thêm tối ưu hóa.

Nếu mẫu thành công, người bảo vệ tương ứng (nếu có) được đánh giá. Trong trường hợp này, tất cả các ràng buộc tên được đảm bảo đã xảy ra.

Nếu người bảo vệ đánh giá là đúng hoặc bị thiếu, (2-3j) (1+0j) 0j (5-9j) 06 bên trong (2-3j) (1+0j) 0j (5-9j) 05 được thực thi.Irrefutable Case Blocks¶

Một khối trường hợp không thể chối cãi là một khối trường hợp khớp. Một câu lệnh khớp có thể có nhiều nhất một khối trường hợp không thể chối cãi và nó phải là cuối cùng.

Một khối trường hợp được coi là không thể bác bỏ nếu nó không có bảo vệ và mô hình của nó là không thể bác bỏ. Một mô hình được coi là không thể bác bỏ nếu chúng ta có thể chứng minh từ cú pháp của nó rằng nó sẽ luôn thành công. Chỉ các mẫu sau đây là không thể bác bỏ:

  • Như các mẫu có phía bên trái là không thể bác bỏ whose left-hand side is irrefutable

  • Hoặc các mẫu chứa ít nhất một mẫu không thể bác bỏ containing at least one irrefutable pattern

  • Nắm bắt các mẫu

  • Mô hình đại diện

  • mô hình không thể chối cãi

8.6.4. MẫuPatterns¶

Ghi chú

Phần này sử dụng các ký hiệu ngữ pháp ngoài EBNF tiêu chuẩn:

  • Ký hiệu

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    23 là tốc ký cho
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    24

  • Ký hiệu

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    25 là cách viết tắt cho một khẳng định nhìn tiêu cực

Cú pháp cấp cao nhất cho

(2-3j)
(1+0j)
0j
(5-9j)
26 là:

(2-3j)
(1+0j)
0j
(5-9j)
8

Các mô tả dưới đây sẽ bao gồm một mô tả về các thuật ngữ đơn giản về những gì một mẫu làm cho mục đích minh họa (tín dụng cho Raymond Hettinger cho một tài liệu đã truyền cảm hứng cho hầu hết các mô tả). Lưu ý rằng các mô tả này hoàn toàn cho mục đích minh họa và có thể không phản ánh việc thực hiện cơ bản. Hơn nữa, họ không bao gồm tất cả các hình thức hợp lệ.may not reflect the underlying implementation. Furthermore, they do not cover all valid forms.

8.6.4.1. Hoặc các mẫuOR Patterns¶

Một hoặc mẫu là hai hoặc nhiều mẫu được phân tách bằng các thanh dọc

(2-3j)
(1+0j)
0j
(5-9j)
27. Cú pháp:

(2-3j)
(1+0j)
0j
(5-9j)
9

Chỉ có phân tử cuối cùng có thể không thể bác bỏ và mỗi tiểu ban đầu phải liên kết cùng một tập hợp tên để tránh sự mơ hồ.irrefutable, and each subpattern must bind the same set of names to avoid ambiguity.

Một mẫu OR phù hợp với từng mẫu của nó lần lượt với giá trị chủ đề, cho đến khi một thành công. Các mô hình hoặc sau đó được coi là thành công. Mặt khác, nếu không có bảng phân phụ nào thành công, hoặc mẫu không thành công.

Nói một cách đơn giản,

(2-3j)
(1+0j)
0j
(5-9j)
28 sẽ cố gắng khớp với
(2-3j)
(1+0j)
0j
(5-9j)
29, nếu nó thất bại, nó sẽ cố gắng khớp với
(2-3j)
(1+0j)
0j
(5-9j)
30, thành công ngay lập tức nếu có thành công, không thành công.

8.6.4.2. Như mẫuAS Patterns¶

Một mẫu AS phù hợp với một mẫu AR ở bên trái của từ khóa

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
10 đối với một chủ đề. Cú pháp:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
0

Nếu hoặc mẫu thất bại, mẫu AS không thành công. Mặt khác, mẫu AS liên kết chủ thể với tên ở bên phải của từ khóa AS và thành công.

(2-3j)
(1+0j)
0j
(5-9j)
32 không thể là A
(2-3j)
(1+0j)
0j
(5-9j)
33.

Trong các thuật ngữ đơn giản

(2-3j)
(1+0j)
0j
(5-9j)
34 sẽ phù hợp với
(2-3j)
(1+0j)
0j
(5-9j)
35 và thành công, nó sẽ đặt
(2-3j)
(1+0j)
0j
(5-9j)
36.

8.6.4.3. Các mẫu theo nghĩa đenLiteral Patterns¶

Một mô hình theo nghĩa đen tương ứng với hầu hết các chữ trong Python. Cú pháp:literals in Python. Syntax:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
1

Quy tắc

(2-3j)
(1+0j)
0j
(5-9j)
37 và mã thông báo
(2-3j)
(1+0j)
0j
(5-9j)
38 được xác định trong ngữ pháp Python tiêu chuẩn. Chuỗi trích dẫn ba được hỗ trợ. Chuỗi thô và chuỗi byte được hỗ trợ. Chuỗi được định dạng không được hỗ trợ.standard Python grammar. Triple-quoted strings are supported. Raw strings and byte strings are supported. Formatted string literals are not supported.

Các biểu mẫu

(2-3j)
(1+0j)
0j
(5-9j)
39 và
(2-3j)
(1+0j)
0j
(5-9j)
40 là để thể hiện các số phức; Họ yêu cầu một số thực ở bên trái và một số tưởng tượng ở bên phải. Ví dụ.
(2-3j)
(1+0j)
0j
(5-9j)
41.complex numbers; they require a real number on the left and an imaginary number on the right. E.g.
(2-3j)
(1+0j)
0j
(5-9j)
41.

Nói một cách đơn giản,

(2-3j)
(1+0j)
0j
(5-9j)
42 sẽ chỉ thành công nếu
(2-3j)
(1+0j)
0j
(5-9j)
43. Đối với Singletons
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
93,
(2-3j)
(1+0j)
0j
(5-9j)
45 và
(2-3j)
(1+0j)
0j
(5-9j)
46, toán tử
(2-3j)
(1+0j)
0j
(5-9j)
47 được sử dụng.

8.6.4.4. Nắm bắt các mẫuCapture Patterns¶

Một mẫu chụp liên kết giá trị chủ thể với một tên. Cú pháp:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
2

Một dấu gạch dưới

(2-3j)
(1+0j)
0j
(5-9j)
33 không phải là một mẫu chụp (đây là những gì
(2-3j)
(1+0j)
0j
(5-9j)
49 thể hiện). Thay vào đó, nó được coi là
(2-3j)
(1+0j)
0j
(5-9j)
50.

Trong một mẫu nhất định, một tên nhất định chỉ có thể bị ràng buộc một lần. Ví dụ.

(2-3j)
(1+0j)
0j
(5-9j)
51 không hợp lệ trong khi
(2-3j)
(1+0j)
0j
(5-9j)
52 được cho phép.

Chụp các mẫu luôn thành công. Các ràng buộc tuân theo các quy tắc phạm vi được thiết lập bởi toán tử biểu thức gán trong PEP 572; Tên này trở thành một biến cục bộ trong phạm vi chức năng chứa gần nhất trừ khi có câu lệnh

(2-3j)
(1+0j)
0j
(5-9j)
53 hoặc
(2-3j)
(1+0j)
0j
(5-9j)
54 áp dụng.PEP 572; the name becomes a local variable in the closest containing function scope unless there’s an applicable
(2-3j)
(1+0j)
0j
(5-9j)
53 or
(2-3j)
(1+0j)
0j
(5-9j)
54 statement.

Nói một cách đơn giản

(2-3j)
(1+0j)
0j
(5-9j)
55 sẽ luôn thành công và nó sẽ đặt
(2-3j)
(1+0j)
0j
(5-9j)
36.

8.6.4.5. Hoa văn ký tự đại diệnWildcard Patterns¶

Một mô hình ký tự đại diện luôn thành công (phù hợp với bất cứ điều gì) và không liên kết tên. Cú pháp:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
3

(2-3j)
(1+0j)
0j
(5-9j)
33 là một từ khóa mềm trong bất kỳ mẫu nào, nhưng chỉ trong các mẫu. Nó là một định danh, như thường lệ, ngay cả trong các biểu thức chủ đề
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
99,
(2-3j)
(1+0j)
0j
(5-9j)
10S và
(2-3j)
(1+0j)
0j
(5-9j)
00 khối.soft keyword within any pattern, but only within patterns. It is an identifier, as usual, even within
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
99 subject expressions,
(2-3j)
(1+0j)
0j
(5-9j)
10s, and
(2-3j)
(1+0j)
0j
(5-9j)
00 blocks.

Nói một cách đơn giản,

(2-3j)
(1+0j)
0j
(5-9j)
33 sẽ luôn thành công.

8.6.4.6. Mẫu giá trị JoValue Patterns¶

Một mẫu giá trị đại diện cho một giá trị được đặt tên trong Python. Cú pháp:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
4

Tên chấm trong mẫu được tra cứu bằng các quy tắc độ phân giải tên Python tiêu chuẩn. Mẫu thành công nếu giá trị được tìm thấy so sánh với giá trị chủ thể (sử dụng toán tử bình đẳng

(2-3j)
(1+0j)
0j
(5-9j)
62).name resolution rules. The pattern succeeds if the value found compares equal to the subject value (using the
(2-3j)
(1+0j)
0j
(5-9j)
62 equality operator).

Nói một cách đơn giản

(2-3j)
(1+0j)
0j
(5-9j)
63 sẽ chỉ thành công nếu
(2-3j)
(1+0j)
0j
(5-9j)
64

Ghi chú

Phần này sử dụng các ký hiệu ngữ pháp ngoài EBNF tiêu chuẩn:

Ký hiệu
(2-3j)
(1+0j)
0j
(5-9j)
23 là tốc ký cho
(2-3j)
(1+0j)
0j
(5-9j)
24
Group Patterns¶

Ký hiệu

(2-3j)
(1+0j)
0j
(5-9j)
25 là cách viết tắt cho một khẳng định nhìn tiêu cực

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
5

Trong các thuật ngữ đơn giản

(2-3j)
(1+0j)
0j
(5-9j)
65 có tác dụng tương tự như
(2-3j)
(1+0j)
0j
(5-9j)
35.

8.6.4.8. Các mẫu trình tựSequence Patterns¶

Một mẫu trình tự chứa một số mẫu con được khớp với các yếu tố chuỗi. Cú pháp tương tự như việc giải nén danh sách hoặc tuple.

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
6

Không có sự khác biệt nếu dấu ngoặc đơn hoặc dấu ngoặc vuông được sử dụng cho các mẫu trình tự (nghĩa là

(2-3j)
(1+0j)
0j
(5-9j)
67 so với
(2-3j)
(1+0j)
0j
(5-9j)
68).

Ghi chú

Một mô hình duy nhất được đặt trong ngoặc đơn mà không có dấu phẩy kéo dài (ví dụ:

(2-3j)
(1+0j)
0j
(5-9j)
69) là một mẫu nhóm. Trong khi một mẫu đơn được đặt trong các dấu ngoặc vuông (ví dụ:
(2-3j)
(1+0j)
0j
(5-9j)
70) vẫn là một mẫu trình tự.group pattern. While a single pattern enclosed in square brackets (e.g.
(2-3j)
(1+0j)
0j
(5-9j)
70) is still a sequence pattern.

Nhiều nhất một tiểu trình sao có thể nằm trong một mẫu trình tự. Tiểu nhà sao có thể xảy ra ở bất kỳ vị trí nào. Nếu không có SubPattern có mặt, mẫu trình tự là mẫu trình tự có độ dài cố định; Nếu không, nó là một mẫu trình tự có độ dài thay đổi.

Sau đây là luồng logic để khớp một mẫu trình tự với giá trị chủ đề:

  1. Nếu giá trị chủ thể không phải là chuỗi 2, mẫu trình tự không thành công.

  2. Nếu giá trị chủ thể là một thể hiện của

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    71,
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    72 hoặc
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    73, mẫu trình tự không thành công.

  3. Các bước tiếp theo phụ thuộc vào việc mẫu trình tự có cố định hay có độ dài thay đổi.

    Nếu mẫu trình tự có độ dài cố định:

    1. Nếu độ dài của chuỗi chủ thể không bằng số lượng tiểu ban

    2. Các mẫu con trong mẫu trình tự được khớp với các mục tương ứng của chúng trong chuỗi chủ đề từ trái sang phải. Kết hợp dừng lại ngay khi một người mẫu đơn thất bại. Nếu tất cả các nhà mạng thành công trong việc khớp mục tương ứng của chúng, mẫu trình tự thành công.

    Mặt khác, nếu mẫu trình tự có độ dài thay đổi:

    1. Nếu độ dài của trình tự chủ đề nhỏ hơn số lượng tiểu ban tế không sao, thì mẫu trình tự không thành công.

    2. Các phân nhóm không sao hàng đầu được khớp với các mục tương ứng của chúng như cho các chuỗi có độ dài cố định.

    3. Nếu bước trước thành công, SubPotype Star phù hợp với một danh sách được hình thành các mục chủ đề còn lại, không bao gồm các mục còn lại tương ứng với các bảng phân nhóm không sao theo tiểu đơn vị sao.

    4. Các tiểu trình không sao còn lại được khớp với các mục chủ đề tương ứng của chúng, như đối với một chuỗi có độ dài cố định.

    Ghi chú

    Một mô hình duy nhất được đặt trong ngoặc đơn mà không có dấu phẩy kéo dài (ví dụ:

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    69) là một mẫu nhóm. Trong khi một mẫu đơn được đặt trong các dấu ngoặc vuông (ví dụ:
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    70) vẫn là một mẫu trình tự.value patterns.

Nhiều nhất một tiểu trình sao có thể nằm trong một mẫu trình tự. Tiểu nhà sao có thể xảy ra ở bất kỳ vị trí nào. Nếu không có SubPattern có mặt, mẫu trình tự là mẫu trình tự có độ dài cố định; Nếu không, nó là một mẫu trình tự có độ dài thay đổi.

  • Sau đây là luồng logic để khớp một mẫu trình tự với giá trị chủ đề:

  • (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    79

  • Nếu giá trị chủ thể không phải là chuỗi 2, mẫu trình tự không thành công.

  • Nếu giá trị chủ thể là một thể hiện của

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    71,
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    72 hoặc
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    73, mẫu trình tự không thành công.

  • Các bước tiếp theo phụ thuộc vào việc mẫu trình tự có cố định hay có độ dài thay đổi.

Nếu mẫu trình tự có độ dài cố định:Mapping Patterns¶

Nếu độ dài của chuỗi chủ thể không bằng số lượng tiểu ban

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
7

Các mẫu con trong mẫu trình tự được khớp với các mục tương ứng của chúng trong chuỗi chủ đề từ trái sang phải. Kết hợp dừng lại ngay khi một người mẫu đơn thất bại. Nếu tất cả các nhà mạng thành công trong việc khớp mục tương ứng của chúng, mẫu trình tự thành công.

Mặt khác, nếu mẫu trình tự có độ dài thay đổi:

Nếu độ dài của trình tự chủ đề nhỏ hơn số lượng tiểu ban tế không sao, thì mẫu trình tự không thành công.

  1. Các phân nhóm không sao hàng đầu được khớp với các mục tương ứng của chúng như cho các chuỗi có độ dài cố định.

  2. Nếu bước trước thành công, SubPotype Star phù hợp với một danh sách được hình thành các mục chủ đề còn lại, không bao gồm các mục còn lại tương ứng với các bảng phân nhóm không sao theo tiểu đơn vị sao.

  3. Các tiểu trình không sao còn lại được khớp với các mục chủ đề tương ứng của chúng, như đối với một chuỗi có độ dài cố định.

Ghi chú

Một mô hình duy nhất được đặt trong ngoặc đơn mà không có dấu phẩy kéo dài (ví dụ:

(2-3j)
(1+0j)
0j
(5-9j)
69) là một mẫu nhóm. Trong khi một mẫu đơn được đặt trong các dấu ngoặc vuông (ví dụ:
(2-3j)
(1+0j)
0j
(5-9j)
70) vẫn là một mẫu trình tự.

Nhiều nhất một tiểu trình sao có thể nằm trong một mẫu trình tự. Tiểu nhà sao có thể xảy ra ở bất kỳ vị trí nào. Nếu không có SubPattern có mặt, mẫu trình tự là mẫu trình tự có độ dài cố định; Nếu không, nó là một mẫu trình tự có độ dài thay đổi.

  • Sau đây là luồng logic để khớp một mẫu trình tự với giá trị chủ đề:

  • (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    93

  • Nếu giá trị chủ thể không phải là chuỗi 2, mẫu trình tự không thành công.

  • Nếu giá trị chủ thể là một thể hiện của

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    71,
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    72 hoặc
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    73, mẫu trình tự không thành công.

Các bước tiếp theo phụ thuộc vào việc mẫu trình tự có cố định hay có độ dài thay đổi.Class Patterns¶

Nếu mẫu trình tự có độ dài cố định:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
8

Nếu độ dài của chuỗi chủ thể không bằng số lượng tiểu ban

Các mẫu con trong mẫu trình tự được khớp với các mục tương ứng của chúng trong chuỗi chủ đề từ trái sang phải. Kết hợp dừng lại ngay khi một người mẫu đơn thất bại. Nếu tất cả các nhà mạng thành công trong việc khớp mục tương ứng của chúng, mẫu trình tự thành công.

  1. Mặt khác, nếu mẫu trình tự có độ dài thay đổi:

  2. Nếu độ dài của trình tự chủ đề nhỏ hơn số lượng tiểu ban tế không sao, thì mẫu trình tự không thành công.

  3. Nếu không có đối số mẫu nào có mặt, mẫu thành công. Mặt khác, các bước tiếp theo phụ thuộc vào việc có từ khóa hoặc các mẫu đối số vị trí có mặt.

    Đối với một số loại tích hợp (được chỉ định bên dưới), một phân tử vị trí duy nhất được chấp nhận sẽ phù hợp với toàn bộ đối tượng; Đối với các loại mẫu từ khóa này cũng hoạt động như các loại khác.

    Nếu chỉ có các mẫu từ khóa, chúng được xử lý như sau, từng cái một:

    I. Từ khóa được tra cứu như một thuộc tính trên chủ đề.

    • Nếu điều này làm tăng một ngoại lệ khác với

      a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      01, thì ngoại lệ sẽ nổi lên.

    • Nếu điều này tăng

      a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      01, mẫu lớp đã thất bại.

    • Khác, SubPattern được liên kết với mẫu từ khóa được khớp với giá trị thuộc tính của chủ đề. Nếu điều này thất bại, mẫu lớp thất bại; Nếu điều này thành công, trận đấu sẽ tiến hành từ khóa tiếp theo.

    Ii. Nếu tất cả các mẫu từ khóa thành công, mẫu lớp thành công.

    Nếu có bất kỳ mẫu vị trí nào có mặt, chúng được chuyển đổi thành các mẫu từ khóa bằng thuộc tính

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    03 trên lớp
    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    96 trước khi khớp:

    I. Tương đương của

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    05 được gọi.

    • Nếu điều này làm tăng một ngoại lệ, ngoại lệ bong bóng lên.

    • Nếu giá trị trả về không phải là một tuple, việc chuyển đổi không thành công và

      (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      98 sẽ được nâng lên.

    • Nếu có nhiều mẫu vị trí hơn

      a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      07,
      (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      98 sẽ được nâng lên.

    • Mặt khác, mẫu vị trí

      a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      09 được chuyển đổi thành mẫu từ khóa bằng cách sử dụng
      a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      10 làm từ khóa.
      a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      10 phải là một chuỗi; Nếu không
      (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      98 được nâng lên.

    • Nếu có các từ khóa trùng lặp,

      (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      98 sẽ được nâng lên.

    Ii. Khi tất cả các mẫu vị trí đã được chuyển đổi thành các mẫu từ khóa,

    Trận đấu tiến hành như thể chỉ có các mẫu từ khóa.

    Đối với các loại tích hợp sau đây, việc xử lý các phân nhóm vị trí là khác nhau:

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      14

    • (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      73

    • (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      72

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      17

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      18

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      19

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      20

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      21

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      22

    • (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      71

    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      24

    Các lớp này chấp nhận một đối số vị trí duy nhất và mẫu ở đó được khớp với toàn bộ đối tượng chứ không phải là một thuộc tính. Ví dụ

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    25 khớp với giá trị
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    26, nhưng không phải là giá trị
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    27.

Nói một cách đơn giản

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
28 chỉ khớp với nhau nếu điều sau xảy ra:

  • a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    29

  • Chuyển đổi

    (2-3j)
    (1+0j)
    0j
    (5-9j)
    
    29 thành mẫu từ khóa bằng cách sử dụng
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    31

  • Đối với mỗi đối số từ khóa
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    32:
    • a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      33

    • (2-3j)
      (1+0j)
      0j
      (5-9j)
      
      30 khớp với
      a = 2+3j
      print('a =',a)
      print('Type of a is',type(a))
      
      b = -2j
      print('b =',b)
      print('Type of b is',type(a))
      
      c = 0j
      print('c =',c)
      print('Type of c is',type(c))
      35

  • Càng và như vậy cho cặp từ khóa/mẫu từ khóa tương ứng.

Xem thêm

  • PEP 634 - Kết hợp mô hình cấu trúc: Đặc điểm kỹ thuật – Structural Pattern Matching: Specification

  • PEP 636 - Phù hợp với mô hình cấu trúc: Hướng dẫn – Structural Pattern Matching: Tutorial

8.7. Định nghĩa chức năngFunction definitions¶

Định nghĩa chức năng xác định đối tượng chức năng do người dùng xác định (xem phần phân cấp loại tiêu chuẩn):The standard type hierarchy):

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
9

Một định nghĩa chức năng là một tuyên bố 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 chức năng này chứa một tham chiếu đến không gian tên toàn cầu hiện tại là không gian tên toàn cầu sẽ được sử dụng khi hàm được gọi.

Định nghĩa chức năng không thực thi cơ thể chức năng; Điều này chỉ được thực thi khi hàm được gọi. 4

Một định nghĩa chức năng có thể được bao bọc bởi một hoặc nhiều biểu thức trang trí. 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 cuộc gọi, được gọi với đối tượng hàm là đố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 nhà trang trí được áp dụng trong thời trang lồng nhau. Ví dụ: mã saudecorator expressions. Decorator expressions are evaluated when the function is defined, in the scope that contains the function definition. The result must be a callable, which is invoked with the function object as the only argument. The returned value is bound to the function name instead of the function object. Multiple decorators are applied in nested fashion. For example, the following code

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
0

gần như tương đương với

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
1

Ngoại trừ chức năng ban đầu không bị ràng buộc tạm thời với tên

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
36.

Thay đổi trong phiên bản 3.9: Các chức năng có thể được trang trí với bất kỳ

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
37 hợp lệ nào. Trước đây, ngữ pháp đã hạn chế hơn nhiều; Xem PEP 614 để biết chi tiết.Functions may be decorated with any valid
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
37. Previously, the grammar was much more restrictive; see PEP 614 for details.

Khi một hoặc nhiều tham số có biểu thức biểu mẫu

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
38, hàm được cho là có cá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ể được bỏ qua từ một cuộc 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, tất cả các tham số sau cho đến khi ____ ____339, cũng phải có giá trị mặc định - đây là một hạn chế cú pháp không được biểu thị bởi ngữ pháp.parameters have the form parameter
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
38 expression, the function is said to have “default parameter values.” For a parameter with a default value, the corresponding argument may be omitted from a call, in which case the parameter’s default value is substituted. If a parameter has a default value, all following parameters up until the “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
39” must also have a default value — this is a syntactic restriction that is not expressed by the grammar.

Các giá trị tham số mặc định được đánh giá từ trái sang phải 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 cuộc gọi. Điều này đặc biệt quan trọng để hiểu khi giá trị tham số mặc định là một đối tượng có thể thay đổi, chẳng hạn như danh sách hoặc từ điển: nếu hàm sửa đổi đối tượng (ví dụ: bằng cách nối một mục vào danh sách), giá trị tham số 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 xung quanh điều này là sử dụng

z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
93 làm mặc định và kiểm tra rõ ràng cho nó trong phần thân của hàm, ví dụ: This means that the expression is evaluated once, when the function is defined, and that the same “pre-computed” value is used for each call. This is especially important to understand when a default parameter value is a mutable object, such as a list or a dictionary: if the function modifies the object (e.g. by appending an item to a list), the default parameter value is in effect modified. This is generally not what was intended. A way around this is to use
z = complex(2, -3)
print(z)

z = complex(1)
print(z)

z = complex()
print(z)

z = complex('5-9j')
print(z)
93 as the default, and explicitly test for it in the body of the function, e.g.:

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
2

Chức năng gọi ngữ nghĩa được mô tả chi tiết hơn trong các cuộc gọi phần. Một cuộc gọi hàm luôn gán các giá trị cho tất cả các tham số được đề cập trong danh sách tham số, từ các đối số vị trí, từ các đối số từ khóa hoặc từ các giá trị mặc định. Nếu có biểu mẫu ____ ____341, có mặt, nó sẽ được khởi tạo thành một bộ dữ liệu nhận bất kỳ tham số vị trí dư thừa nào, mặc định đến bộ tuple trống. Nếu có biểu mẫu ____ ____342, có mặt, nó sẽ được khởi tạo thành một ánh xạ được đặt hàng mới nhận bất kỳ đối số từ khóa dư thừa nào, mặc định vào một ánh xạ trống mới cùng loại. Các tham số sau khi ____ ____339, hoặc ____ ____341 là các tham số chỉ dành cho từ khóa và chỉ có thể được truyền bằng các đối số từ khóa. Các tham số trước khi ____ ____345 là các tham số chỉ có vị trí và chỉ có thể được truyền qua các đối số vị trí.Calls. A function call always assigns values to all parameters mentioned in the parameter list, either from positional arguments, from keyword arguments, or from default values. If the form “

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
41” is present, it is initialized to a tuple receiving any excess positional parameters, defaulting to the empty tuple. If the form “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
42” is present, it is initialized to a new ordered mapping receiving any excess keyword arguments, defaulting to a new empty mapping of the same type. Parameters after “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
39” or “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
41” are keyword-only parameters and may only be passed by keyword arguments. Parameters before “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
45” are positional-only parameters and may only be passed by positional arguments.

Đã thay đổi trong phiên bản 3.8: Cú pháp tham số hàm

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
45 có thể được sử dụng để chỉ ra các tham số chỉ có vị trí. Xem PEP 570 để biết chi tiết.The
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
45 function parameter syntax may be used to indicate positional-only parameters. See PEP 570 for details.

Các tham số có thể có chú thích của biểu mẫu ____ ____347, theo tên tham số. Bất kỳ tham số nào cũng có thể có chú thích, ngay cả những hình thức

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
41 hoặc
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
42. Các chức năng có thể có sự chú thích của Return Return về biểu mẫu ____ ____350, sau danh sách tham số. Những chú thích này có thể là bất kỳ biểu thức python hợp lệ nào. Sự hiện diện của các chú thích không thay đổi ngữ nghĩa của một hàm. Các giá trị chú thích có sẵn dưới dạng các giá trị của từ điển được khóa bởi các tham số Tên tên trong thuộc tính
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
51 của đối tượng hàm. Nếu nhập
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
52 từ
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
53 được sử dụng, các chú thích được bảo tồn dưới dạng chuỗi trong thời gian chạy cho phép đánh giá hoãn lại. Mặt khác, chúng được đánh giá khi định nghĩa hàm được thực thi. Trong trường hợp này, các chú thích có thể được đánh giá theo một thứ tự khác so với chúng xuất hiện trong mã nguồn.annotation of the form “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
47” following the parameter name. Any parameter may have an annotation, even those of the form
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
41 or
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
42. Functions may have “return” annotation of the form “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
50” after the parameter list. These annotations can be any valid Python expression. The presence of annotations does not change the semantics of a function. The annotation values are available as values of a dictionary keyed by the parameters’ names in the
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
51 attribute of the function object. If the
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
52 import from
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
53 is used, annotations are preserved as strings at runtime which enables postponed evaluation. Otherwise, they are evaluated when the function definition is executed. In this case annotations may be evaluated in a different order than they appear in the source code.

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 lập tức trong các biểu thức. Điều này sử dụng các biểu thức lambda, được mô tả trong phần lambdas. Lưu ý rằng biểu thức Lambda chỉ là một tốc ký cho định nghĩa hàm đơn giản hóa; Một hàm được xác định trong một câu lệnh ____ ____354 có thể được truyền xung quanh hoặc được gán cho một tên khác giống như một hàm được xác định bởi biểu thức lambda. Biểu mẫu ____ ____354 thực sự mạnh hơn vì nó cho phép thực hiện nhiều câu lệnh và chú thích.Lambdas. Note that the lambda expression is merely a shorthand for a simplified function definition; a function defined in a “

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
54” statement can be passed around or assigned to another name just like a function defined by a lambda expression. The “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
54” form is actually more powerful since it allows the execution of multiple statements and annotations.

Lập trình viên Lưu ý: Các chức năng là các đối tượng hạng nhất. Một câu lệnh ____ ____354 được thực thi bên trong một định nghĩa hàm xác định một hàm cục bộ có thể được trả về hoặc thông qua. Các biến miễn phí đượ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 đặt tên và ràng buộc để biết chi tiết. Functions are first-class objects. A “

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
54” statement executed inside a function definition defines a local function that can be returned or passed around. Free variables used in the nested function can access the local variables of the function containing the def. See section Naming and binding for details.

Xem thêm

PEP 3107 - Chú thích chức năng - Function Annotations

Các đặc điểm kỹ thuật ban đầu cho chú thích chức năng.

PEP 484 - Loại gợi ý - Type Hints

Định nghĩa của một ý nghĩa tiêu chuẩn cho các chú thích: Loại gợi ý.

PEP 526 - Cú pháp để chú thích biến - Syntax for Variable Annotations

Khả năng nhập các khai báo biến gợi ý, bao gồm các biến lớp và biến thể hiện

PEP 563 - Đánh giá các chú thích bị hoãn lại - Postponed Evaluation of Annotations

Hỗ trợ cho các tài liệu tham khảo chuyển tiếp trong các chú thích bằng cách bảo tồn các chú thích ở dạng chuỗi trong thời gian chạy thay vì đánh giá háo hức.

8.8. Định nghĩa lớpClass definitions¶

Định nghĩa lớp xác định một đối tượng lớp (xem phần phân cấp loại tiêu chuẩn):The standard type hierarchy):

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
3

Một định nghĩa lớp là một tuyên bố thực thi. Danh sách kế thừa thường đưa ra một danh sách các lớp cơ sở (xem Metaclasses để sử dụng nâng cao hơn), vì vậy mỗi mục trong danh sách nên đánh giá đến một đối tượng lớp cho phép phân lớp. Theo mặc định, các lớp không có danh sách kế thừa từ lớp cơ sở

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
57; kể từ đây,Metaclasses for more advanced uses), so each item in the list should evaluate to a class object which allows subclassing. Classes without an inheritance list inherit, by default, from the base class
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
57; hence,

tương đương với

Sau đó, bộ lớp lớp sau đó được thực thi trong khung thực thi mới (xem đặt tên và ràng buộc), sử dụng một không gian tên cục bộ mới được tạo và không gian tên toàn cầu ban đầu. . 5 Đối tượng lớp sau đó được tạo bằng danh sách kế thừa 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 bị ràng buộc với đối tượng lớp này trong không gian tên cục bộ ban đầu.Naming and binding), using a newly created local namespace and the original global namespace. (Usually, the suite contains mostly function definitions.) When the class’s suite finishes execution, its execution frame is discarded but its local namespace is saved. 5 A class object is then created using the inheritance list for the base classes and the saved local namespace for the attribute dictionary. The class name is bound to this class object in the original local namespace.

Thứ tự mà các thuộc tính được xác định trong thân lớp được bảo tồn trong lớp mới ____ ____358. Lưu ý rằng điều này chỉ đáng tin cậy ngay sau khi lớp được tạo và chỉ cho các lớp được xác định bằng cú pháp định nghĩa.

Tạo lớp có thể được tùy chỉnh rất nhiều bằng cách sử dụng metaclasses.metaclasses.

Các lớp học cũng có thể được trang trí: Giống như khi trang trí chức năng,

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
4

gần như tương đương với

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
5

Các quy tắc đánh giá cho các biểu thức trang trí giống như đối với các trình trang trí chức năng. Kết quả sau đó bị ràng buộc với tên lớp.

Thay đổi trong phiên bản 3.9: Các lớp có thể được trang trí với bất kỳ

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
37 hợp lệ nào. Trước đây, ngữ pháp đã hạn chế hơn nhiều; Xem PEP 614 để biết chi tiết.Classes may be decorated with any valid
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
37. Previously, the grammar was much more restrictive; see PEP 614 for details.

Lập trình LƯU Ý Lưu ý: Các biến được xác định trong định nghĩa lớp là thuộc tính lớp; Họ được chia sẻ bởi các trường hợp. Các thuộc tính thể hiện có thể được đặt trong một phương thức với

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
60. Cả hai thuộc tính lớp và thể hiện đều có thể truy cập được thông qua ký hiệu
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
61, và một thuộc tính thể hiện ẩn một thuộc tính lớp có cùng tên khi được truy cập theo cách này. Các thuộc tính lớp có thể được sử dụng làm mặc định ví dụ các thuộc tính, nhưng sử dụng các giá trị có thể thay đổi có thể dẫn đến kết quả không mong muốn. 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.
Variables defined in the class definition are class attributes; they are shared by instances. Instance attributes can be set in a method with
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
60. Both class and instance attributes are accessible through the notation “
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
61”, and an instance attribute hides a class attribute with the same name when accessed in this way. Class attributes can be used as defaults for instance attributes, but using mutable values there can lead to unexpected results. Descriptors can be used to create instance variables with different implementation details.

Xem thêm

PEP 3115 - Metaclasses trong Python 3000 - Metaclasses in Python 3000

Đề xuất đã thay đổi tuyên bố của các metaclass thành cú pháp hiện tại và ngữ nghĩa về cách các lớp với các metaclass được xây dựng.

PEP 3129 - Người trang trí lớp học - Class Decorators

Các đề xuất thêm các nhà trang trí lớp. Các nhà trang trí chức năng và phương pháp đã được giới thiệu trong PEP 318.PEP 318.

8,9. Coroutines¶Coroutines¶

Mới trong phiên bản 3.5.

8.9.1. Định nghĩa chức năng CoroutineCoroutine function definition¶

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
6

Việc thực hiện Python Coroutines có thể bị đình chỉ và tiếp tục tại nhiều điểm (xem Coroutine).

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
62 Biểu thức,
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
63 và
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
64 chỉ có thể được sử dụng trong phần thân của chức năng coroutine.coroutine).
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
62 expressions,
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
63 and
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
64 can only be used in the body of a coroutine function.

Các chức năng được xác định với cú pháp

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
65 luôn là các hàm coroutine, ngay cả khi chúng không chứa
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
62 hoặc
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
67 từ khóa.

Đó là một

(2-3j)
(1+0j)
0j
(5-9j)
84 để sử dụng biểu thức
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
69 bên trong phần thân của chức năng coroutine.

Một ví dụ về chức năng coroutine:

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
7

Đã thay đổi trong phiên bản 3.7:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
62 và
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
67 hiện là từ khóa; Trước đây chúng chỉ được đối xử như vậy bên trong cơ thể của một chức năng coroutine.
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
62 and
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
67 are now keywords; previously they were only treated as such inside the body of a coroutine function.

8.9.2. Tuyên bố a = 2+3j print('a =',a) print('Type of a is',type(a)) b = -2j print('b =',b) print('Type of b is',type(a)) c = 0j print('c =',c) print('Type of c is',type(c))63The a = 2+3j print('a =',a) print('Type of a is',type(a)) b = -2j print('b =',b) print('Type of b is',type(a)) c = 0j print('c =',c) print('Type of c is',type(c))63 statement¶

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
8

Một sự lặp lại không đồng bộ cung cấp một phương thức

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
73 trực tiếp trả về một trình lặp không đồng bộ, có thể gọi mã không đồng bộ theo phương thức
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
74 của nó.asynchronous iterable provides an
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
73 method that directly returns an asynchronous iterator, which can call asynchronous code in its
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
74 method.

Tuyên bố

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
63 cho phép lặp thuận tiện trên các vòng lặp không đồng bộ.

Mã sau:

a = (2+3j)
Type of a is <class>
b = (-0-2j)
Type of b is <class>
c = 0j
Type of c is <class>
9

Tương đương về mặt ngữ nghĩa với:

if test1: if test2: print(x)
0

Xem thêm

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
76 và
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
77 để biết chi tiết.

Đó là một

(2-3j)
(1+0j)
0j
(5-9j)
84 để sử dụng câu lệnh
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
63 bên ngoài cơ thể của chức năng coroutine.

8.9.3. Tuyên bố a = 2+3j print('a =',a) print('Type of a is',type(a)) b = -2j print('b =',b) print('Type of b is',type(a)) c = 0j print('c =',c) print('Type of c is',type(c))64The a = 2+3j print('a =',a) print('Type of a is',type(a)) b = -2j print('b =',b) print('Type of b is',type(a)) c = 0j print('c =',c) print('Type of c is',type(c))64 statement¶

if test1: if test2: print(x)
1

Trình quản lý ngữ cảnh không đồng bộ là người quản lý ngữ cảnh có thể đình chỉ thực thi trong các phương thức ENTER and EXIT của nó.asynchronous context manager is a context manager that is able to suspend execution in its enter and exit methods.

Mã sau:

if test1: if test2: print(x)
2

Tương đương về mặt ngữ nghĩa với:

if test1: if test2: print(x)
3

Xem thêm

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
76 và
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
77 để biết chi tiết.

Đó là một

(2-3j)
(1+0j)
0j
(5-9j)
84 để sử dụng câu lệnh
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
63 bên ngoài cơ thể của chức năng coroutine.

Xem thêm

PEP 3115 - Metaclasses trong Python 3000 - Coroutines with async and await syntax

Đề xuất đã thay đổi tuyên bố của các metaclass thành cú pháp hiện tại và ngữ nghĩa về cách các lớp với các metaclass được xây dựng.

PEP 3129 - Người trang trí lớp học

1

Các đề xuất thêm các nhà trang trí lớp. Các nhà trang trí chức năng và phương pháp đã được giới thiệu trong PEP 318.

2

8,9. Coroutines¶

  • Mới trong phiên bản 3.5.

  • 8.9.1. Định nghĩa chức năng Coroutine

  • Việc thực hiện Python Coroutines có thể bị đình chỉ và tiếp tục tại nhiều điểm (xem Coroutine).

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    62 Biểu thức,
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    63 và
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    64 chỉ có thể được sử dụng trong phần thân của chức năng coroutine.

  • Các chức năng được xác định với cú pháp

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    65 luôn là các hàm coroutine, ngay cả khi chúng không chứa
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    62 hoặc
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    67 từ khóa.

Đó là một

(2-3j)
(1+0j)
0j
(5-9j)
84 để sử dụng biểu thức
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
69 bên trong phần thân của chức năng coroutine.

  • a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    89

  • a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    90

  • a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    21

  • a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    92

  • a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    93

  • a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    24

Một ví dụ về chức năng coroutine:

Đã thay đổi trong phiên bản 3.7:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
62 và
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
67 hiện là từ khóa; Trước đây chúng chỉ được đối xử như vậy bên trong cơ thể của một chức năng coroutine.

3

8.9.2. Tuyên bố

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
63

  • Một sự lặp lại không đồng bộ cung cấp một phương thức

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    73 trực tiếp trả về một trình lặp không đồng bộ, có thể gọi mã không đồng bộ theo phương thức
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    74 của nó.

  • Tuyên bố

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    63 cho phép lặp thuận tiện trên các vòng lặp không đồng bộ.

  • Mã sau:

  • Các chức năng được xác định với cú pháp

    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    65 luôn là các hàm coroutine, ngay cả khi chúng không chứa
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    62 hoặc
    a = 2+3j
    print('a =',a)
    print('Type of a is',type(a))
    
    b = -2j
    print('b =',b)
    print('Type of b is',type(a))
    
    c = 0j
    print('c =',c)
    print('Type of c is',type(c))
    67 từ khóa.

Đó là một

(2-3j)
(1+0j)
0j
(5-9j)
84 để sử dụng biểu thức
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
69 bên trong phần thân của chức năng coroutine.

4

Một ví dụ về chức năng coroutine:docstring.

5

Đã thay đổi trong phiên bản 3.7:

a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
62 và
a = 2+3j
print('a =',a)
print('Type of a is',type(a))

b = -2j
print('b =',b)
print('Type of b is',type(a))

c = 0j
print('c =',c)
print('Type of c is',type(c))
67 hiện là từ khóa; Trước đây chúng chỉ được đối xử như vậy bên trong cơ thể của một chức năng coroutine.docstring.

Số lượng phức tạp trong Python với ví dụ là gì?

Một số phức được tạo từ các số thực. Số phức Python có thể được tạo bằng cách sử dụng câu lệnh gán trực tiếp hoặc bằng cách sử dụng hàm phức tạp (). Các số phức tạp hầu hết được sử dụng ở nơi chúng tôi đang sử dụng hai số thực.created from real numbers. Python complex number can be created either using direct assignment statement or by using complex () function. Complex numbers which are mostly used where we are using two real numbers.

3 tuyên bố trong Python là gì?

Chủ yếu có bốn loại tuyên bố trong Python, báo cáo in, tuyên bố gán, tuyên bố có điều kiện, câu lệnh lặp.Các câu lệnh in và gán thường được sử dụng.print statements, Assignment statements, Conditional statements, Looping statements. The print and assignment statements are commonly used.

Một lớp học phức tạp trong Python là gì?

Python Complex () Phương thức phức tạp () trả về một số phức khi các bộ phận thực và tưởng tượng được cung cấp, hoặc nó chuyển đổi một chuỗi thành một số phức.Cú pháp của phức tạp () là: phức tạp ([real [, hình ảnh]]))The complex() method returns a complex number when real and imaginary parts are provided, or it converts a string to a complex number. The syntax of complex() is: complex([real[, imag]])

Những tuyên bố trong Python là gì?

Một câu lệnh là một hướng dẫn mà trình thông dịch Python có thể thực thi.Chúng tôi đã thấy hai loại tuyên bố: in và gán.Khi bạn nhập một câu lệnh trên dòng lệnh, Python thực hiện nó và hiển thị kết quả, nếu có.Kết quả của một câu lệnh in là một giá trị.an instruction that the Python interpreter can execute. We have seen two kinds of statements: print and assignment. When you type a statement on the command line, Python executes it and displays the result, if there is one. The result of a print statement is a value.