Hướng dẫn what will be the value of expression 4 3 in python? - Giá trị của biểu thức 4 3 trong python là bao nhiêu?

Thứ Hai, ngày 31 tháng 10 năm 2022

Show

Latest:

  • Blockchain MCQS QUIZ với câu trả lời
  • Mảng Q1 C, những mảng trong các thuộc tính C., ưu điểm, nhược điểm, khai báo và khởi tạo các mảng.
  • Đếm đồng tiền - Tạo một hàm để tính tổng số tiền, đọc đầu vào từ stdin và in đầu ra sang stdout
  • Q6. Trình biên dịch phía sau hiện trường. Làm thế nào để biên dịch hoạt động. Có bao nhiêu giai đoạn trong các phần tổng hợp? Bộ tiền xử lý, trình biên dịch, trình biên dịch, trình liên kết và trình tải.
  • Q5 Chỉ thị linh tinh là gì. Các loại chỉ thị linh tinh (#undef và #Pragma)?

Hướng dẫn what will be the value of expression 4 3 in python? - Giá trị của biểu thức 4 3 trong python là bao nhiêu?

Khoa học Phục sinh

"Chúng tôi hỗ trợ bạn lựa chọn tốt nhất.", Các tiện ích, công nghệ và cuộc thi

  • Tin tức
    • Chung
    • Công nghệ
    • Dụng cụ
  • Video
    • Video YouTube
    • Video hàng đầu
  • Giấy tờ thi
    • MCA
    • Khoa học máy tính BSC
  • Liên hệ chúng tôi
  • Đặt một câu hỏi
  • Hỏi & Đáp

Nhân viên của Geek Boy đã hỏi 3 tháng trướcStaff asked 3 months ago

Giá trị của biểu thức Python sau đây là gì?

4 + 3 % 5

một. 7 b. 2 c. 4 d. 1
b. 2
c. 4
d. 1

Có liên quan

1 câu trả lời

Nhân viên của Geek Boy đã trả lời 3 tháng trướcStaff answered 3 months ago

một. 7 Giải thích: Thứ tự ưu tiên là: %, +. Do đó, biểu thức ở trên, trên đơn giản hóa kết quả trong 4 + 3 = 7. Do đó kết quả là 7.
Explanation: The order of precedence is: %, +. Hence the expression above, on simplification results in 4 + 3 = 7. Hence the result is 7.

Có liên quan

Chương này giải thích ý nghĩa của các yếu tố của biểu thức trong Python.

Ghi chú cú pháp: Trong các chương này và các chương sau, ký hiệu BNF mở rộng sẽ được sử dụng để mô tả cú pháp, không phải phân tích từ vựng. Khi (một thay thế) một quy tắc cú pháp có biểu mẫu In this and the following chapters, extended BNF notation will be used to describe syntax, not lexical analysis. When (one alternative of) a syntax rule has the form

name ::=  othername

Và không có ngữ nghĩa nào được đưa ra, ngữ nghĩa của hình thức

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
5 này giống như đối với
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
6.

6.1. Chuyển đổi số họcArithmetic conversions¶

Khi một mô tả về toán tử số học bên dưới sử dụng cụm từ, các đối số số được chuyển đổi thành một loại chung, điều này có nghĩa là việc triển khai toán tử cho các loại tích hợp hoạt động như sau:

  • Nếu một trong hai đối số là một số phức, thì cái còn lại được chuyển đổi thành phức tạp;

  • Mặt khác, nếu một trong hai đối số là một số điểm nổi, thì một đối số khác được chuyển đổi thành điểm nổi;

  • Nếu không, cả hai phải là số nguyên và không cần chuyển đổi.

Một số quy tắc bổ sung áp dụng cho các toán tử nhất định (ví dụ: một chuỗi là đối số bên trái cho toán tử ‘%,). Phần mở rộng phải xác định hành vi chuyển đổi của riêng họ.

6.2. Nguyên tửAtoms¶

Các nguyên tử là các yếu tố cơ bản nhất của biểu thức. Các nguyên tử đơn giản nhất là định danh hoặc nghĩa đen. Các hình thức được bao bọc trong ngoặc đơn, ngoặc hoặc niềng răng cũng được phân loại theo cách cú pháp như các nguyên tử. Cú pháp cho các nguyên tử là:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom

6.2.1. Định danh (tên)Identifiers (Names)¶

Một định danh xảy ra dưới dạng nguyên tử là một tên. Xem phần Định danh và các từ khóa để định nghĩa từ vựng và đặt tên phần và ràng buộc để tài liệu đặt tên và ràng buộc.Identifiers and keywords for lexical definition and section Naming and binding for documentation of naming and binding.

Khi tên bị ràng buộc với một đối tượng, việc đánh giá nguyên tử mang lại đối tượng đó. Khi một tên không bị ràng buộc, một nỗ lực để đánh giá nó sẽ tăng ngoại lệ

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
7.

Tên riêng biệt mang tính: Khi một định danh xảy ra theo văn bản trong một định nghĩa lớp bắt đầu với hai hoặc nhiều ký tự dấu gạch dưới và không kết thúc trong hai hoặc nhiều dấu gạch dưới, nó được coi là một tên riêng của lớp đó. Tên riêng được chuyển đổi thành một dạng dài hơn trước khi mã được tạo cho chúng. Biến đổi chèn tên lớp, với các dấu gạch dưới hàng đầu được xóa và một dấu gạch dưới được chèn, trước tên. Ví dụ, định danh

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
8 xảy ra trong một lớp có tên
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
9 sẽ được chuyển đổi thành
parenth_form ::=  "(" [starred_expression] ")"
0. Sự biến đổi này độc lập với bối cảnh cú pháp trong đó định danh được sử dụng. Nếu tên được chuyển đổi cực kỳ dài (dài hơn 255 ký tự), việc thực hiện cắt ngắn được xác định có thể xảy ra. Nếu tên lớp chỉ bao gồm dấu gạch dưới, không có sự chuyển đổi nào được thực hiện.
When an identifier that textually occurs in a class definition begins with two or more underscore characters and does not end in two or more underscores, it is considered a private name of that class. Private names are transformed to a longer form before code is generated for them. The transformation inserts the class name, with leading underscores removed and a single underscore inserted, in front of the name. For example, the identifier
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
8 occurring in a class named
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
9 will be transformed to
parenth_form ::=  "(" [starred_expression] ")"
0. This transformation is independent of the syntactical context in which the identifier is used. If the transformed name is extremely long (longer than 255 characters), implementation defined truncation may happen. If the class name consists only of underscores, no transformation is done.

6.2.2. Theo nghĩa chữLiterals¶

Python hỗ trợ chuỗi và byte chữ và các chữ số khác nhau:

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber

Đánh giá một nghĩa đen mang lại một đối tượng của loại đã cho (chuỗi, byte, số nguyên, số điểm nổi, số phức) với giá trị đã cho. Giá trị có thể được xấp xỉ trong trường hợp dấu phẩy động và nghĩa đen (phức tạp). Xem phần Bình luận để biết chi tiết.Literals for details.

Tất cả các chữ tương ứng với các loại dữ liệu bất biến và do đó, nhận dạng đối tượng ít quan trọng hơn giá trị của nó. Nhiều đánh giá của các nghĩa đen có cùng một giá trị (cùng một sự xuất hiện trong văn bản chương trình hoặc một sự xuất hiện khác nhau) có thể có được cùng một đối tượng hoặc một đối tượng khác với cùng một giá trị.

6.2.3. Hình thức ngoặc đơnParenthesized forms¶

Một hình thức ngoặc đơn là một danh sách biểu thức tùy chọn được đặt trong ngoặc đơn:

parenth_form ::=  "(" [starred_expression] ")"

Một danh sách biểu thức được đặt dấu ngoặc đơn mang lại bất cứ điều gì mà danh sách biểu thức đó mang lại: Nếu danh sách chứa ít nhất một dấu phẩy, nó sẽ mang lại một tuple; Mặt khác, nó mang lại biểu thức duy nhất tạo nên danh sách biểu thức.

Một cặp dấu ngoặc đơn trống mang lại một đối tượng Tuple trống. Vì các bộ dữ liệu là bất biến, các quy tắc tương tự như đối với các nghĩa đen được áp dụng (nghĩa là, hai lần xuất hiện của tuple trống có thể hoặc không thể mang lại cùng một đối tượng).

Lưu ý rằng các bộ dữ liệu không được hình thành bởi dấu ngoặc đơn, mà là bằng cách sử dụng dấu phẩy. Ngoại lệ là bộ tuple trống, trong đó các dấu ngoặc đơn được yêu cầu - cho phép không có gì không được khám phá, không có gì trong các biểu thức sẽ gây ra sự mơ hồ và cho phép các lỗi chính tả phổ biến vượt qua.

6.2.4. Hiển thị danh sách, bộ và từ điểnDisplays for lists, sets and dictionaries¶

Để xây dựng một danh sách, một tập hợp hoặc một python từ điển cung cấp cú pháp đặc biệt có tên là Display Display, mỗi bộ trong số chúng trong hai hương vị:

  • Nội dung container được liệt kê rõ ràng hoặc

  • Chúng được tính toán thông qua một tập hợp các hướng dẫn lặp và lọc, được gọi là sự hiểu biết.

Các yếu tố cú pháp chung cho sự hiểu biết là:

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]

Sự hiểu biết bao gồm một biểu thức duy nhất theo sau là ít nhất một mệnh đề

parenth_form ::=  "(" [starred_expression] ")"
1 và 0 hoặc nhiều hơn
parenth_form ::=  "(" [starred_expression] ")"
1 hoặc
parenth_form ::=  "(" [starred_expression] ")"
3. Trong trường hợp này, các phần tử của container mới là các phần tử sẽ được sản xuất bằng cách xem xét từng điều khoản
parenth_form ::=  "(" [starred_expression] ")"
1 hoặc
parenth_form ::=  "(" [starred_expression] ")"
3, làm tổ từ trái sang phải và đánh giá biểu thức để tạo ra một phần tử mỗi lần đạt được khối trong cùng.

Tuy nhiên, ngoài biểu thức có thể lặp lại trong mệnh đề

parenth_form ::=  "(" [starred_expression] ")"
1 ngoài cùng bên trái, sự hiểu biết được thực hiện trong một phạm vi được lồng nhau riêng biệt. Điều này đảm bảo rằng các tên được gán cho trong danh sách mục tiêu don lồng rò rỉ vào phạm vi kèm theo.

Biểu thức có thể lặp lại trong mệnh đề

parenth_form ::=  "(" [starred_expression] ")"
1 ngoài cùng bên trái được đánh giá trực tiếp trong phạm vi kèm theo và sau đó được chuyển làm đối số cho phạm vi lồng nhau ngầm. Các mệnh đề
parenth_form ::=  "(" [starred_expression] ")"
1 sau đó và bất kỳ điều kiện lọc nào trong mệnh đề
parenth_form ::=  "(" [starred_expression] ")"
1 ngoài cùng bên trái không thể được đánh giá trong phạm vi kèm theo vì chúng có thể phụ thuộc vào các giá trị thu được từ có thể lặp lại ngoài cùng bên trái. Ví dụ:
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
0.

Để đảm bảo sự hiểu biết luôn dẫn đến một thùng chứa thuộc loại thích hợp, các biểu thức

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 và
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
2 bị cấm trong phạm vi lồng nhau ngầm.

Vì Python 3.6, trong hàm

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3, một mệnh đề
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 có thể được sử dụng để lặp qua một trình lặp không đồng bộ. Sự hiểu biết trong hàm
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3 có thể bao gồm một mệnh đề
parenth_form ::=  "(" [starred_expression] ")"
1 hoặc
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 theo biểu thức hàng đầu, có thể chứa các mệnh đề
parenth_form ::=  "(" [starred_expression] ")"
1 hoặc
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 bổ sung và cũng có thể sử dụng các biểu thức
list_display ::=  "[" [starred_list | comprehension] "]"
0. Nếu sự hiểu biết chứa các biểu thức
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 hoặc
list_display ::=  "[" [starred_list | comprehension] "]"
0 hoặc các hình thức không đồng bộ khác, nó được gọi là một sự hiểu biết không đồng bộ. Một sự hiểu biết không đồng bộ có thể đình chỉ việc thực hiện chức năng coroutine trong đó nó xuất hiện. Xem thêm Pep 530.asynchronous iterator. A comprehension in an
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3 function may consist of either a
parenth_form ::=  "(" [starred_expression] ")"
1 or
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 clause following the leading expression, may contain additional
parenth_form ::=  "(" [starred_expression] ")"
1 or
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 clauses, and may also use
list_display ::=  "[" [starred_list | comprehension] "]"
0 expressions. If a comprehension contains either
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 clauses or
list_display ::=  "[" [starred_list | comprehension] "]"
0 expressions or other asynchronous comprehensions it is called an asynchronous comprehension. An asynchronous comprehension may suspend the execution of the coroutine function in which it appears. See also PEP 530.

Mới trong Phiên bản 3.6: Sự toàn diện không đồng bộ đã được giới thiệu.Asynchronous comprehensions were introduced.

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

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 và
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
2 bị cấm trong phạm vi lồng nhau ngầm.
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 and
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
2 prohibited in the implicitly nested scope.

Đã thay đổi trong phiên bản 3.11: Các toàn diện không đồng bộ hiện được cho phép bên trong sự hiểu biết trong các hàm không đồng bộ. Sự hiểu biết bên ngoài ngầm trở nên không đồng bộ.Asynchronous comprehensions are now allowed inside comprehensions in asynchronous functions. Outer comprehensions implicitly become asynchronous.

6.2.5. Danh sách hiển thịList displays¶

Màn hình danh sách là một loạt các biểu thức có thể trống được đặt trong ngoặc vuông:

list_display ::=  "[" [starred_list | comprehension] "]"

Hiển thị danh sách mang lại một đối tượng danh sách mới, nội dung được chỉ định bởi một danh sách các biểu thức hoặc sự hiểu biết. Khi một danh sách các biểu thức được phân tách bằng dấu phẩy được cung cấp, các yếu tố của nó được đánh giá từ trái sang phải và được đặt vào đối tượng danh sách theo thứ tự đó. Khi một sự hiểu biết được cung cấp, danh sách được xây dựng từ các yếu tố do sự hiểu biết.

6.2.6. Đặt màn hình hiển thịSet displays¶

Một màn hình tập hợp được biểu thị bằng niềng răng xoăn và có thể phân biệt với màn hình từ điển bằng cách thiếu các dấu chấm phân tách các khóa và giá trị:

set_display ::=  "{" (starred_list | comprehension) "}"

Hiển thị tập hợp mang lại một đối tượng SET có thể thay đổi mới, các nội dung được chỉ định bởi một chuỗi các biểu thức hoặc sự hiểu biết. Khi một danh sách các biểu thức được phân tách bằng dấu phẩy được cung cấp, các yếu tố của nó được đánh giá từ trái sang phải và được thêm vào đối tượng đã đặt. Khi một sự hiểu biết được cung cấp, tập hợp được xây dựng từ các yếu tố do sự hiểu biết.

Một tập hợp trống không thể được xây dựng với

list_display ::=  "[" [starred_list | comprehension] "]"
5; Điều này xây dựng một từ điển trống.

6.2.7. Dictionary Hiển thịDictionary displays¶

Màn hình từ điển là một loạt các cặp khóa/dữ liệu có thể được đặt trong niềng răng xoăn:

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for

Một màn hình từ điển mang lại một đối tượng từ điển mới.

Nếu một chuỗi được phân tách bằng dấu phẩy được đưa ra, chúng được đánh giá từ trái sang phải để xác định các mục của từ điển: mỗi đối tượng khóa được sử dụng làm khóa vào từ điển để lưu trữ mốc dữ liệu tương ứng. Điều này có nghĩa là bạn có thể chỉ định cùng một khóa nhiều lần trong danh sách khóa/mốc và giá trị từ điển cuối cùng cho khóa đó sẽ là cái cuối cùng được đưa ra.

Một dấu hoa thị kép

list_display ::=  "[" [starred_list | comprehension] "]"
6 biểu thị từ điển giải nén. Toán tử của nó phải là một bản đồ. Mỗi mục ánh xạ được thêm vào từ điển mới. Các giá trị sau này thay thế các giá trị đã được đặt bởi các cặp khóa/dữ liệu trước đó và giải nén từ điển trước đó.mapping. Each mapping item is added to the new dictionary. Later values replace values already set by earlier key/datum pairs and earlier dictionary unpackings.

Mới trong phiên bản 3.5: Giải nén vào màn hình từ điển, ban đầu được đề xuất bởi PEP 448.Unpacking into dictionary displays, originally proposed by PEP 448.

Một sự hiểu biết chính thống, trái ngược với danh sách và thiết lập sự hiểu biết, cần hai biểu thức được phân tách bằng một dấu hai chấm, theo sau là thông thường cho đối với các điều khoản và các điều khoản. Khi sự hiểu biết được chạy, các phần tử giá trị và khóa kết quả được chèn trong từ điển mới theo thứ tự chúng được sản xuất.

Hạn chế đối với các loại giá trị chính được liệt kê trước đó trong phần phân cấp loại tiêu chuẩn. . Datum cuối cùng (về mặt văn bản bên phải trong màn hình) được lưu trữ cho một giá trị khóa nhất đã chiếm ưu thế.The standard type hierarchy. (To summarize, the key type should be hashable, which excludes all mutable objects.) Clashes between duplicate keys are not detected; the last datum (textually rightmost in the display) stored for a given key value prevails.

Đã thay đổi trong phiên bản 3.8: Trước Python 3.8, theo trình độ của Dict, thứ tự đánh giá của khóa và giá trị không được xác định rõ. Trong CPython, giá trị được đánh giá trước khóa. Bắt đầu với 3,8, khóa được đánh giá trước giá trị, theo đề xuất của PEP 572.Prior to Python 3.8, in dict comprehensions, the evaluation order of key and value was not well-defined. In CPython, the value was evaluated before the key. Starting with 3.8, the key is evaluated before the value, as proposed by PEP 572.

6.2.8. Biểu thức máy phátGenerator expressions¶

Biểu thức máy phát là ký hiệu máy phát điện compact trong ngoặc đơn:

generator_expression ::=  "(" expression comp_for ")"

Một biểu thức máy phát mang lại một đối tượng máy phát mới. Cú pháp của nó giống như đối với các toàn bộ, ngoại trừ việc nó được đặt trong ngoặc đơn thay vì dấu ngoặc hoặc niềng răng xoăn.

Các biến được sử dụng trong biểu thức máy phát được đánh giá một cách lười biếng khi phương thức

list_display ::=  "[" [starred_list | comprehension] "]"
7 được gọi cho đối tượng Trình tạo (theo cùng kiểu với các trình tạo bình thường). Tuy nhiên, biểu thức có thể lặp lại trong mệnh đề
parenth_form ::=  "(" [starred_expression] ")"
1 ngoài cùng bên trái được đánh giá ngay lập tức, do đó một lỗi được tạo ra sẽ được phát ra tại điểm xác định biểu thức máy phát, thay vì tại điểm lấy lại giá trị đầu tiên. Các mệnh đề
parenth_form ::=  "(" [starred_expression] ")"
1 sau đó và bất kỳ điều kiện lọc nào trong mệnh đề
parenth_form ::=  "(" [starred_expression] ")"
1 ngoài cùng bên trái không thể được đánh giá trong phạm vi kèm theo vì chúng có thể phụ thuộc vào các giá trị thu được từ có thể lặp lại ngoài cùng bên trái. Ví dụ:
set_display ::=  "{" (starred_list | comprehension) "}"
1.

Các dấu ngoặc đơn có thể được bỏ qua trong các cuộc gọi chỉ với một đối số. Xem phần gọi để biết chi tiết.Calls for details.

Để tránh can thiệp vào hoạt động dự kiến ​​của biểu thức máy phát, các biểu thức

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 và
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
2 bị cấm trong trình tạo được xác định ngầm.

Nếu một biểu thức trình tạo chứa các biểu thức

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 hoặc
list_display ::=  "[" [starred_list | comprehension] "]"
0, nó được gọi là biểu thức máy phát không đồng bộ. Một biểu thức máy phát không đồng bộ trả về một đối tượng máy phát không đồng bộ mới, đây là một trình lặp không đồng bộ (xem iterator không đồng bộ).Asynchronous Iterators).

Mới trong phiên bản 3.6: Biểu thức tạo không đồng bộ đã được giới thiệu.Asynchronous generator expressions were introduced.

Đã thay đổi trong phiên bản 3.7: Trước Python 3.7, các biểu thức tạo không đồng bộ chỉ có thể xuất hiện trong

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3 Coroutines. Bắt đầu với 3.7, bất kỳ chức năng nào cũng có thể sử dụng các biểu thức máy phát không đồng bộ.Prior to Python 3.7, asynchronous generator expressions could only appear in
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3 coroutines. Starting with 3.7, any function can use asynchronous generator expressions.

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

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 và
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
2 bị cấm trong phạm vi lồng nhau ngầm.
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 and
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
2 prohibited in the implicitly nested scope.

6.2.9. Năng lượng biểu thức năng suấtYield expressions¶

name ::=  othername
0

Biểu thức năng suất được sử dụng khi xác định hàm tạo hoặc hàm tạo không đồng bộ và do đó chỉ có thể được sử dụng trong phần thân của định nghĩa hàm. Sử dụng biểu thức năng suất trong cơ thể chức năng, làm cho chức năng đó là chức năng của trình tạo và sử dụng nó trong cơ thể

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3 Chức năng khiến chức năng coroutine trở thành một hàm tạo không đồng bộ. Ví dụ:generator function or an asynchronous generator function and thus can only be used in the body of a function definition. Using a yield expression in a function’s body causes that function to be a generator function, and using it in an
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3 function’s body causes that coroutine function to be an asynchronous generator function. For example:

name ::=  othername
1

Do tác dụng phụ của chúng đối với phạm vi chứa, các biểu thức

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 không được phép là một phần của phạm vi được xác định ngầm được sử dụng để thực hiện các biểu thức toàn diện và trình tạo.

Đã thay đổi trong phiên bản 3.8: Các biểu thức năng suất bị cấm trong các phạm vi lồng nhau ngầm được sử dụng để thực hiện các biểu thức toàn diện và trình tạo.Yield expressions prohibited in the implicitly nested scopes used to implement comprehensions and generator expressions.

Các chức năng của máy phát được mô tả dưới đây, trong khi các hàm máy phát không đồng bộ được mô tả riêng biệt trong phần Các hàm máy phát không đồng bộ.Asynchronous generator functions.

Khi một hàm máy phát được gọi, nó sẽ trả về một trình lặp được gọi là trình tạo. Trình tạo đó sau đó kiểm soát việc thực thi hàm máy phát. Việc thực hiện bắt đầu khi một trong các phương thức của máy phát điện được gọi. Vào thời điểm đó, việc thực hiện tiến hành biểu thức năng suất đầu tiên, trong đó nó bị đình chỉ một lần nữa, trả lại giá trị của

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
1 cho người gọi máy phát điện. Bằng cách đình chỉ, chúng tôi có nghĩa là tất cả các trạng thái địa phương được giữ lại, bao gồm các ràng buộc hiện tại của các biến cục bộ, con trỏ hướng dẫn, ngăn xếp đánh giá nội bộ và trạng thái của bất kỳ xử lý ngoại lệ nào. Khi thực thi được nối lại bằng cách gọi một trong các phương thức của Trình tạo, hàm có thể tiến hành chính xác như thể biểu thức năng suất chỉ là một cuộc gọi bên ngoài khác. Giá trị của biểu thức năng suất sau khi tiếp tục phụ thuộc vào phương thức tiếp tục thực thi. Nếu
list_display ::=  "[" [starred_list | comprehension] "]"
7 được sử dụng (thường thông qua
parenth_form ::=  "(" [starred_expression] ")"
1 hoặc
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
4 tích hợp) thì kết quả là
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5. Mặt khác, nếu
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
6 được sử dụng, thì kết quả sẽ là giá trị được truyền vào phương pháp đó.

Tất cả điều này làm cho các chức năng của máy phát khá giống với coroutines; Họ mang lại nhiều lần, họ có nhiều hơn một điểm vào và việc thực hiện của họ có thể bị đình chỉ. Sự khác biệt duy nhất là hàm máy phát không thể kiểm soát khi thực hiện nên tiếp tục sau khi nó mang lại; Điều khiển luôn được chuyển đến người gọi máy phát điện.

Biểu thức năng suất được cho phép ở bất cứ đâu trong cấu trúc

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
7. Nếu trình tạo không được nối lại trước khi nó được hoàn thiện (bằng cách đạt được số lượng tham chiếu bằng không hoặc bằng cách thu thập rác), phương thức máy phát điện-ra ____ ____88 sẽ được gọi, cho phép bất kỳ điều khoản
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
9 đang chờ xử lý nào.

Khi

generator_expression ::=  "(" expression comp_for ")"
0 được sử dụng, biểu thức được cung cấp phải là một điều không thể điều chỉnh được. Các giá trị được tạo ra bởi việc lặp lại rằng IT có thể được chuyển trực tiếp cho người gọi của các phương thức máy phát điện hiện tại. Bất kỳ giá trị nào được truyền vào với
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
6 và bất kỳ trường hợp ngoại lệ nào được truyền vào với
generator_expression ::=  "(" expression comp_for ")"
2 đều được truyền đến trình lặp cơ bản nếu nó có các phương thức thích hợp. Nếu đây không phải là trường hợp, thì
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
6 sẽ tăng
generator_expression ::=  "(" expression comp_for ")"
4 hoặc
generator_expression ::=  "(" expression comp_for ")"
5, trong khi
generator_expression ::=  "(" expression comp_for ")"
2 sẽ chỉ tăng ngoại lệ ngay lập tức.

Khi bộ lặp cơ bản hoàn tất, thuộc tính

generator_expression ::=  "(" expression comp_for ")"
7 của ví dụ
generator_expression ::=  "(" expression comp_for ")"
8 được nâng lên trở thành giá trị của biểu thức năng suất. Nó có thể được đặt một cách rõ ràng khi tăng
generator_expression ::=  "(" expression comp_for ")"
8 hoặc tự động khi trình điều khiển là một trình tạo (bằng cách trả về một giá trị từ trình phân chia).

Đã thay đổi trong phiên bản 3.3: Đã thêm

generator_expression ::=  "(" expression comp_for ")"
0 để ủy quyền luồng điều khiển cho một tiểu thư.Added
generator_expression ::=  "(" expression comp_for ")"
0 to delegate control flow to a subiterator.

Các dấu ngoặc đơn có thể được bỏ qua khi biểu thức năng suất là biểu thức duy nhất ở phía bên phải của một câu lệnh gán.

Xem thêm

PEP 255 - Máy phát điện đơn giản - Simple Generators

Đề xuất thêm các trình tạo và tuyên bố

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
1 vào Python.

PEP 342 - Coroutines thông qua các máy phát điện nâng cao - Coroutines via Enhanced Generators

Đề xuất tăng cường API và cú pháp của các máy phát điện, làm cho chúng có thể sử dụng như các coroutines đơn giản.

PEP 380 - Cú pháp để ủy thác cho bộ chia - Syntax for Delegating to a Subgenerator

Đề xuất giới thiệu cú pháp

name ::=  othername
02, giúp phái đoàn trở nên dễ dàng.

PEP 525 - Máy phát điện không đồng bộ - Asynchronous Generators

Đề xuất mở rộng trên PEP 492 bằng cách thêm các khả năng của máy phát vào các chức năng coroutine.PEP 492 by adding generator capabilities to coroutine functions.

6.2.9.1. Phương pháp máy phát điệnGenerator-iterator methods¶

Tiểu mục này mô tả các phương thức của một trình lặp máy phát. Chúng có thể được sử dụng để kiểm soát việc thực hiện hàm máy phát.

Lưu ý rằng việc gọi bất kỳ phương thức trình tạo nào bên dưới khi trình tạo đã thực thi tăng ngoại lệ

name ::=  othername
03.

Máy phát điện .__ Tiếp theo __ ()__next__()

Bắt đầu thực thi hàm trình tạo hoặc tiếp tục nó ở biểu thức năng suất được thực hiện cuối cùng. Khi một hàm máy phát được nối lại với phương thức

list_display ::=  "[" [starred_list | comprehension] "]"
7, biểu thức năng suất hiện tại luôn đánh giá thành
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5. Việc thực hiện sau đó tiếp tục đến biểu thức năng suất tiếp theo, trong đó trình tạo bị treo trở lại và giá trị của
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
1 được trả lại cho người gọi ____ ____ 67. Nếu máy phát thoát ra mà không mang lại giá trị khác, ngoại lệ
generator_expression ::=  "(" expression comp_for ")"
8 sẽ được nâng lên.

Phương pháp này thường được gọi là ngầm, ví dụ: bởi một vòng lặp

parenth_form ::=  "(" [starred_expression] ")"
1 hoặc bằng hàm
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
4 tích hợp.

Generator.Send (Giá trị) ¶send(value)

Tiếp tục thực thi và người hâm mộ gửi một giá trị vào hàm trình tạo. Đối số giá trị trở thành kết quả của biểu thức năng suất hiện tại. Phương thức

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
6 trả về giá trị tiếp theo được tạo bởi trình tạo hoặc tăng
generator_expression ::=  "(" expression comp_for ")"
8 nếu trình tạo thoát ra mà không mang lại giá trị khác. Khi
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
6 được gọi để khởi động trình tạo, nó phải được gọi bằng
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5 làm đối số, bởi vì không có biểu thức năng suất nào có thể nhận được giá trị.

Generator.throw (Giá trị) ¶erator.throw (loại [, value [, tracback]]))throw(value)generator.throw(type[, value[, traceback]])

Tăng một ngoại lệ tại điểm mà máy phát được tạm dừng và trả về giá trị tiếp theo được mang lại bởi hàm máy phát. Nếu máy phát thoát ra mà không mang lại giá trị khác, ngoại lệ

generator_expression ::=  "(" expression comp_for ")"
8 sẽ được nâng lên. Nếu chức năng trình tạo không bắt được ngoại lệ được truyền, hoặc tăng một ngoại lệ khác, thì ngoại lệ đó sẽ truyền cho người gọi.

Trong sử dụng điển hình, điều này được gọi với một trường hợp ngoại lệ duy nhất tương tự như cách sử dụng từ khóa

name ::=  othername
16.

Tuy nhiên, đối với khả năng tương thích ngược, chữ ký thứ hai được hỗ trợ, theo một quy ước từ các phiên bản cũ của Python. Đối số loại phải là một lớp ngoại lệ và giá trị phải là một thể hiện ngoại lệ. Nếu giá trị không được cung cấp, hàm tạo loại được gọi để có được một thể hiện. Nếu TraceBack được cung cấp, nó được đặt trên ngoại lệ, nếu không, bất kỳ thuộc tính

name ::=  othername
17 hiện có nào được lưu trữ trong giá trị có thể được xóa.

máy phát điện.close () ¶close()

Tăng

name ::=  othername
18 tại điểm mà hàm máy phát được tạm dừng. Nếu hàm máy phát thì thoát ra một cách duyên dáng, đã bị đóng hoặc tăng
name ::=  othername
18 (bằng cách không bắt được ngoại lệ), hãy đóng trả về cho người gọi của nó. Nếu trình tạo mang lại một giá trị, một
name ::=  othername
20 sẽ được nâng lên. Nếu trình tạo tăng bất kỳ ngoại lệ nào khác, nó sẽ được truyền đến người gọi.
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
8 không làm gì nếu trình tạo đã thoát do ngoại lệ hoặc lối thoát bình thường.

6.2.9.2. Ví dụ;Examples¶

Dưới đây là một ví dụ đơn giản thể hiện hành vi của các trình tạo và hàm máy phát:

name ::=  othername
2

Để biết các ví dụ sử dụng

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
2, hãy xem PEP 380: Cú pháp để ủy thác cho một trình phân chia trong trò chơi What What New In Python.PEP 380: Syntax for Delegating to a Subgenerator in “What’s New in Python.”

6.2.9.3. Chức năng máy phát không đồng bộAsynchronous generator functions¶

Sự hiện diện của biểu thức năng suất trong hàm hoặc phương thức được xác định bằng cách sử dụng

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
3 xác định thêm hàm là hàm tạo không đồng bộ.asynchronous generator function.

Khi một hàm máy phát không đồng bộ được gọi, nó sẽ trả về một trình lặp không đồng bộ được gọi là một đối tượng máy phát không đồng bộ. Đối tượng đó sau đó kiểm soát việc thực thi hàm trình tạo. Một đối tượng máy phát không đồng bộ thường được sử dụng trong câu lệnh

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4 trong hàm coroutine tương tự như cách sử dụng đối tượng trình tạo trong câu lệnh
parenth_form ::=  "(" [starred_expression] ")"
1.

Gọi một trong những phương thức máy phát không đồng bộ trở lại một đối tượng có thể chờ đợi và việc thực thi bắt đầu khi đối tượng này được chờ đợi. Vào thời điểm đó, việc thực hiện tiến hành biểu thức năng suất đầu tiên, trong đó nó bị đình chỉ một lần nữa, trả lại giá trị của

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
1 cho coroutine đang chờ đợi. Như với một máy phát điện, hệ thống treo có nghĩa là tất cả các trạng thái cục bộ được giữ lại, bao gồm các ràng buộc hiện tại của các biến cục bộ, con trỏ hướng dẫn, ngăn xếp đánh giá nội bộ và trạng thái của bất kỳ xử lý ngoại lệ nào. Khi việc thực thi được nối lại bằng cách chờ đối tượng tiếp theo được trả về bởi các phương thức tạo không đồng bộ, chức năng có thể tiến hành chính xác như thể biểu thức năng suất chỉ là một cuộc gọi bên ngoài khác. Giá trị của biểu thức năng suất sau khi tiếp tục phụ thuộc vào phương thức tiếp tục thực thi. Nếu
name ::=  othername
27 được sử dụng thì kết quả là
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5. Mặt khác, nếu
name ::=  othername
29 được sử dụng, thì kết quả sẽ là giá trị được truyền vào phương pháp đó.awaitable object, and the execution starts when this object is awaited on. At that time, the execution proceeds to the first yield expression, where it is suspended again, returning the value of
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
1 to the awaiting coroutine. As with a generator, suspension means that all local state is retained, including the current bindings of local variables, the instruction pointer, the internal evaluation stack, and the state of any exception handling. When the execution is resumed by awaiting on the next object returned by the asynchronous generator’s methods, the function can proceed exactly as if the yield expression were just another external call. The value of the yield expression after resuming depends on the method which resumed the execution. If
name ::=  othername
27 is used then the result is
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5. Otherwise, if
name ::=  othername
29 is used, then the result will be the value passed in to that method.

Nếu một trình tạo không đồng bộ xảy ra thoát ra sớm bằng

name ::=  othername
30, nhiệm vụ người gọi bị hủy hoặc các ngoại lệ khác, mã làm sạch Async của Trình tạo sẽ chạy và có thể tăng các ngoại lệ hoặc truy cập các biến ngữ cảnh trong bối cảnh bất ngờ có lẽ sau thời gian tồn tại của các nhiệm vụ, nó hoặc trong quá trình tắt vòng lặp sự kiện khi móc thu gom rác máy phát điện không đồng bộ được gọi. Để ngăn chặn điều này, người gọi phải đóng một cách rõ ràng trình tạo async bằng cách gọi phương thức
name ::=  othername
31 để hoàn thiện trình tạo và cuối cùng tách nó ra khỏi vòng lặp sự kiện.

Trong hàm tạo không đồng bộ, các biểu thức năng suất được cho phép ở bất cứ đâu trong cấu trúc

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
7. Tuy nhiên, nếu một máy phát không đồng bộ không được nối lại trước khi nó được hoàn thiện (bằng cách đạt được số lượng tham chiếu bằng không hoặc bằng cách thu thập rác), thì một biểu thức năng suất trong cấu trúc
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
7 có thể dẫn đến việc không thực thi các điều khoản đang chờ xử lý. Trong trường hợp này, trách nhiệm của vòng lặp sự kiện hoặc bộ lập lịch chạy trình tạo không đồng bộ để gọi phương thức máy phát máy phát điện không đồng bộ
name ::=  othername
31 và chạy đối tượng Coroutine kết quả, do đó cho phép bất kỳ điều khoản đang chờ xử lý nào.

Để chăm sóc việc hoàn thiện khi chấm dứt vòng lặp sự kiện, một vòng lặp sự kiện nên xác định chức năng Finalizer có trình tạo máy phát không đồng bộ và có lẽ gọi

name ::=  othername
31 và thực hiện coroutine. Bộ kết thúc này có thể được đăng ký bằng cách gọi
name ::=  othername
38. Khi lần đầu tiên lặp lại, một máy phát điện không đồng bộ sẽ lưu trữ bộ hoàn thiện đã đăng ký để được gọi khi hoàn thiện. Để biết ví dụ tham chiếu của phương thức Finalizer, hãy xem việc triển khai
name ::=  othername
39 trong lib/asyncio/base_events.py.

Biểu thức

generator_expression ::=  "(" expression comp_for ")"
0 là lỗi cú pháp khi được sử dụng trong hàm tạo không đồng bộ.

6.2.9.4. Phương pháp máy phát điện không đồng bộAsynchronous generator-iterator methods¶

Tiểu mục này mô tả các phương thức của một trình lặp máy phát không đồng bộ, được sử dụng để kiểm soát việc thực hiện hàm máy phát.

Coroutineagen .__ anext __ () ¶agen.__anext__()

Trả về một sự chờ đợi mà khi chạy bắt đầu thực thi trình tạo không đồng bộ hoặc tiếp tục nó ở biểu thức năng suất được thực hiện cuối cùng. Khi một hàm máy phát không đồng bộ được nối lại với phương thức

name ::=  othername
27, biểu thức năng suất hiện tại luôn đánh giá thành
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5 trong phần được trả lại có thể chờ đợi, khi chạy sẽ tiếp tục đến biểu thức năng suất tiếp theo. Giá trị của
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
1 của biểu thức năng suất là giá trị của ngoại lệ
generator_expression ::=  "(" expression comp_for ")"
8 được tăng lên bởi coroutine hoàn thành. Nếu máy phát không đồng bộ thoát ra mà không mang lại một giá trị khác, thay vào đó, thiết bị đang chờ sẽ tăng ngoại lệ
name ::=  othername
45, báo hiệu rằng việc lặp không đồng bộ đã hoàn thành.

Phương pháp này thường được gọi là ngầm bằng một vòng

comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
4.

coroutine agen.asend(value)

Returns an awaitable which when run resumes the execution of the asynchronous generator. As with the

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
6 method for a generator, this “sends” a value into the asynchronous generator function, and the value argument becomes the result of the current yield expression. The awaitable returned by the
name ::=  othername
29 method will return the next value yielded by the generator as the value of the raised
generator_expression ::=  "(" expression comp_for ")"
8, or raises
name ::=  othername
45 if the asynchronous generator exits without yielding another value. When
name ::=  othername
29 is called to start the asynchronous generator, it must be called with
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5 as the argument, because there is no yield expression that could receive the value.

coroutine agen.athrow(type[, value[, traceback]])

Returns an awaitable that raises an exception of type

name ::=  othername
53 at the point where the asynchronous generator was paused, and returns the next value yielded by the generator function as the value of the raised
generator_expression ::=  "(" expression comp_for ")"
8 exception. If the asynchronous generator exits without yielding another value, a
name ::=  othername
45 exception is raised by the awaitable. If the generator function does not catch the passed-in exception, or raises a different exception, then when the awaitable is run that exception propagates to the caller of the awaitable.

coroutineagen.aclose()

Returns an awaitable that when run will throw a

name ::=  othername
18 into the asynchronous generator function at the point where it was paused. If the asynchronous generator function then exits gracefully, is already closed, or raises
name ::=  othername
18 (by not catching the exception), then the returned awaitable will raise a
generator_expression ::=  "(" expression comp_for ")"
8 exception. Any further awaitables returned by subsequent calls to the asynchronous generator will raise a
name ::=  othername
45 exception. If the asynchronous generator yields a value, a
name ::=  othername
20 is raised by the awaitable. If the asynchronous generator raises any other exception, it is propagated to the caller of the awaitable. If the asynchronous generator has already exited due to an exception or normal exit, then further calls to
name ::=  othername
31 will return an awaitable that does nothing.

6.3. Primaries¶

Primaries represent the most tightly bound operations of the language. Their syntax is:

name ::=  othername
3

6.3.1. Attribute references¶

An attribute reference is a primary followed by a period and a name:

name ::=  othername
4

The primary must evaluate to an object of a type that supports attribute references, which most objects do. This object is then asked to produce the attribute whose name is the identifier. This production can be customized by overriding the

name ::=  othername
62 method. If this attribute is not available, the exception
generator_expression ::=  "(" expression comp_for ")"
4 is raised. Otherwise, the type and value of the object produced is determined by the object. Multiple evaluations of the same attribute reference may yield different objects.

6.3.2. Subscriptions¶

The subscription of an instance of a container class will generally select an element from the container. The subscription of a generic class will generally return a GenericAlias object.

name ::=  othername
5

When an object is subscripted, the interpreter will evaluate the primary and the expression list.

The primary must evaluate to an object that supports subscription. An object may support subscription through defining one or both of

name ::=  othername
64 and
name ::=  othername
65. When the primary is subscripted, the evaluated result of the expression list will be passed to one of these methods. For more details on when
name ::=  othername
66 is called instead of
name ::=  othername
67, see __class_getitem__ versus __getitem__.

If the expression list contains at least one comma, it will evaluate to a

name ::=  othername
68 containing the items of the expression list. Otherwise, the expression list will evaluate to the value of the list’s sole member.

For built-in objects, there are two types of objects that support subscription via

name ::=  othername
64:

  1. Mappings. If the primary is a mapping, the expression list must evaluate to an object whose value is one of the keys of the mapping, and the subscription selects the value in the mapping that corresponds to that key. An example of a builtin mapping class is the

    name ::=  othername
    
    70 class.

  2. Sequences. If the primary is a sequence, the expression list must evaluate to an

    name ::=  othername
    
    71 or a
    name ::=  othername
    
    72 (as discussed in the following section). Examples of builtin sequence classes include the
    name ::=  othername
    
    73,
    name ::=  othername
    
    74 and
    name ::=  othername
    
    68 classes.

The formal syntax makes no special provision for negative indices in sequences. However, built-in sequences all provide a

name ::=  othername
64 method that interprets negative indices by adding the length of the sequence to the index so that, for example,
name ::=  othername
77 selects the last item of
name ::=  othername
78. The resulting value must be a nonnegative integer less than the number of items in the sequence, and the subscription selects the item whose index is that value (counting from zero). Since the support for negative indices and slicing occurs in the object’s
name ::=  othername
64 method, subclasses overriding this method will need to explicitly add that support.

Một

name ::=  othername
80 là một loại trình tự đặc biệt có các mục là các ký tự. Một ký tự không phải là một loại dữ liệu riêng biệt mà là một chuỗi chính xác một ký tự.

6.3.3. Ngả gòSlicings¶

Việc cắt lát chọn một loạt các mục trong một đối tượng chuỗi (ví dụ: một chuỗi, tuple hoặc danh sách). Slicings có thể được sử dụng làm biểu thức hoặc làm mục tiêu trong các câu lệnh gán hoặc

name ::=  othername
81. Cú pháp để cắt lát:

name ::=  othername
6

Có sự mơ hồ trong cú pháp chính thức ở đây: bất cứ điều gì trông giống như một danh sách biểu thức cũng trông giống như một danh sách lát cắt, vì vậy bất kỳ đăng ký nào cũng có thể được hiểu là một sự cắt lát. Thay vì làm phức tạp thêm cú pháp, điều này được định hướng bằng cách xác định rằng trong trường hợp này, việc giải thích là một thuê bao được ưu tiên so với việc giải thích như một sự cắt lát (đây là trường hợp nếu danh sách lát cắt không chứa lát cắt thích hợp).

Các ngữ nghĩa cho một sự cắt lát như sau. Chính được lập chỉ mục (sử dụng cùng một phương thức

name ::=  othername
64 như đăng ký bình thường) với một khóa được xây dựng từ danh sách lát cắt, như sau. Nếu danh sách lát cắt chứa ít nhất một dấu phẩy, chìa khóa là một tuple chứa việc chuyển đổi các mục lát; Mặt khác, việc chuyển đổi mục lát đơn đơn là chìa khóa. Việc chuyển đổi một mục lát cắt là một biểu thức là biểu thức đó. Việc chuyển đổi một lát cắt thích hợp là một đối tượng lát cắt (xem phần phân cấp loại tiêu chuẩn) có các thuộc tính
name ::=  othername
83,
name ::=  othername
84 và
name ::=  othername
85 là các giá trị của các biểu thức được đưa ra như giới hạn dưới, giới hạn trên và sải chân, tương ứng, thay thế
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5 cho các biểu thức bị thiếu.The standard type hierarchy) whose
name ::=  othername
83,
name ::=  othername
84 and
name ::=  othername
85 attributes are the values of the expressions given as lower bound, upper bound and stride, respectively, substituting
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5 for missing expressions.

6.3.4. Cuộc gọi vàCalls¶

Một cuộc gọi gọi là đối tượng có thể gọi (ví dụ: một hàm) với một loạt các đối số có thể trống:function) with a possibly empty series of arguments:

name ::=  othername
7

Một dấu phẩy theo dõi tùy chọn có thể có mặt sau các đối số vị trí và từ khóa nhưng không ảnh hưởng đến ngữ nghĩa.

Chính phải đánh giá thành một đối tượng có thể gọi được (các hàm do người dùng xác định, các hàm tích hợp, phương thức của các đối tượng tích hợp, đối tượng lớp, phương thức của các phiên bản lớp và tất cả các đối tượng có phương thức

name ::=  othername
87 có thể gọi được). Tất cả các biểu thức đối số được đánh giá trước khi cuộc gọi được thực hiện. Vui lòng tham khảo các định nghĩa chức năng phần cho cú pháp của danh sách tham số chính thức.Function definitions for the syntax of formal parameter lists.

Nếu các đối số từ khóa có mặt, trước tiên chúng được chuyển đổi thành các đối số vị trí, như sau. Đầu tiên, một danh sách các vị trí không được lấp đầy được tạo cho các tham số chính thức. Nếu có n đối số vị trí, chúng được đặt trong n khe đầu tiên. Tiếp theo, đối với mỗi đối số từ khóa, mã định danh được sử dụng để xác định vị trí tương ứng (nếu định danh giống như tên tham số chính thức đầu tiên, khe đầu tiên được sử dụng, v.v.). Nếu khe đã được lấp đầy, ngoại lệ

generator_expression ::=  "(" expression comp_for ")"
5 sẽ được nâng lên. Mặt khác, đối số được đặt trong khe, điền nó (ngay cả khi biểu thức là
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5, nó sẽ lấp đầy khe). Khi tất cả các đối số đã được xử lý, các vị trí vẫn chưa được lấp đầy với giá trị mặc định tương ứng từ định nghĩa hàm. (Các giá trị mặc định được tính toán, một lần, khi hàm được xác định; do đó, một đối tượng có thể thay đổi như danh sách hoặc từ điển được sử dụng làm giá trị mặc định thường tránh được.) Nếu có bất kỳ vị trí chưa được thực hiện nào mà không có giá trị mặc định được chỉ định, ngoại lệ
generator_expression ::=  "(" expression comp_for ")"
5 được nâng lên. Mặt khác, danh sách các khe đầy được sử dụng làm danh sách đối số cho cuộc gọi.

Chi tiết triển khai CPYThon: Việc triển khai có thể cung cấp các chức năng tích hợp mà các tham số vị trí không có tên, ngay cả khi chúng được đặt tên cho mục đích của tài liệu và do đó không thể được cung cấp bởi từ khóa. Trong Cpython, đây là trường hợp cho các chức năng được thực hiện trong C sử dụng

name ::=  othername
91 để phân tích các đối số của họ. An implementation may provide built-in functions whose positional parameters do not have names, even if they are ‘named’ for the purpose of documentation, and which therefore cannot be supplied by keyword. In CPython, this is the case for functions implemented in C that use
name ::=  othername
91 to parse their arguments.

Nếu có nhiều đối số vị trí hơn có các khe tham số chính thức, ngoại lệ

generator_expression ::=  "(" expression comp_for ")"
5 được nâng lên, trừ khi có tham số chính thức sử dụng cú pháp
name ::=  othername
93; Trong trường hợp này, tham số chính thức đó nhận được một tuple chứa các đối số vị trí dư thừa (hoặc một bộ rỗng nếu không có đối số vị trí dư thừa).

Nếu bất kỳ đối số từ khóa nào không tương ứng với tên tham số chính thức, ngoại lệ

generator_expression ::=  "(" expression comp_for ")"
5 được nêu ra, trừ khi có tham số chính thức sử dụng cú pháp
name ::=  othername
95; Trong trường hợp này, tham số chính thức đó nhận được một từ điển chứa các đối số từ khóa dư thừa (sử dụng các từ khóa làm khóa và giá trị đối số làm giá trị tương ứng) hoặc từ điển trống (mới) nếu không có đối số từ khóa dư thừa.

Nếu cú ​​pháp

name ::=  othername
96 xuất hiện trong lệnh gọi hàm,
name ::=  othername
97 phải đánh giá thành một điều khác. Các yếu tố từ các vòng lặp này được đối xử như thể chúng là các đối số vị trí bổ sung. Đối với cuộc gọi
name ::=  othername
98, nếu y đánh giá theo trình tự y1, thì, ym, điều này tương đương với một cuộc gọi với các đối số vị trí m+4 x1, x2, y1, ốp, ym, x3, x4.iterable. Elements from these iterables are treated as if they were additional positional arguments. For the call
name ::=  othername
98, if y evaluates to a sequence y1, …, yM, this is equivalent to a call with M+4 positional arguments x1, x2, y1, …, yM, x3, x4.

Hậu quả của điều này là mặc dù cú pháp

name ::=  othername
96 có thể xuất hiện sau các đối số từ khóa rõ ràng, nhưng nó được xử lý trước các đối số từ khóa (và bất kỳ đối số
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
00 nào - xem bên dưới). Vì thế:

name ::=  othername
8

Điều không bình thường đối với cả đối số từ khóa và cú pháp

name ::=  othername
96 sẽ được sử dụng trong cùng một cuộc gọi, vì vậy trong thực tế, sự nhầm lẫn này thường không phát sinh.

Nếu cú ​​pháp

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
00 xuất hiện trong lệnh gọi hàm,
name ::=  othername
97 phải đánh giá theo ánh xạ, nội dung được coi là đối số từ khóa bổ sung. Nếu một tham số khớp, một khóa đã được cung cấp một giá trị (bằng một đối số từ khóa rõ ràng hoặc từ một lần giải nén khác), ngoại lệ
generator_expression ::=  "(" expression comp_for ")"
5 sẽ được nâng lên.mapping, the contents of which are treated as additional keyword arguments. If a parameter matching a key has already been given a value (by an explicit keyword argument, or from another unpacking), a
generator_expression ::=  "(" expression comp_for ")"
5 exception is raised.

Khi

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
00 được sử dụng, mỗi khóa trong ánh xạ này phải là một chuỗi. Mỗi giá trị từ ánh xạ được gán cho tham số chính thức đầu tiên đủ điều kiện cho gán từ khóa có tên bằng khóa. Một khóa không cần phải là một định danh Python (ví dụ:
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
06 là chấp nhận được, mặc dù nó sẽ không khớp với bất kỳ tham số chính thức nào có thể được khai báo). Nếu không có khớp với tham số chính thức, cặp giá trị khóa được thu thập bằng tham số
list_display ::=  "[" [starred_list | comprehension] "]"
6, nếu có, hoặc nếu không có, ngoại lệ
generator_expression ::=  "(" expression comp_for ")"
5 được nâng lên.

Các tham số chính thức bằng cách sử dụng cú pháp

name ::=  othername
93 hoặc
name ::=  othername
95 không thể được sử dụng làm khe đối số vị trí hoặc làm tên đối số từ khóa.

Đã thay đổi trong phiên bản 3.5: Các cuộc gọi chức năng Chấp nhận bất kỳ số lượng nào của

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
11 và
list_display ::=  "[" [starred_list | comprehension] "]"
6 Giải nén, các đối số vị trí có thể tuân theo các khoản giải nén không thể sử dụng được (
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
11) và các đối số từ khóa có thể tuân theo việc giải nén từ điển (
list_display ::=  "[" [starred_list | comprehension] "]"
6). Ban đầu được đề xuất bởi PEP 448.Function calls accept any number of
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
11 and
list_display ::=  "[" [starred_list | comprehension] "]"
6 unpackings, positional arguments may follow iterable unpackings (
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
11), and keyword arguments may follow dictionary unpackings (
list_display ::=  "[" [starred_list | comprehension] "]"
6). Originally proposed by PEP 448.

Một cuộc gọi luôn trả về một số giá trị, có thể là

dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5, trừ khi nó làm tăng một ngoại lệ. Làm thế nào giá trị này được tính toán phụ thuộc vào loại đối tượng có thể gọi được.

Nếu nó là-

một chức năng do người dùng xác định:

Khối mã cho hàm được thực thi, chuyển nó theo danh sách đối số. Điều đầu tiên mà khối mã sẽ làm là liên kết các tham số chính thức với các đối số; Điều này được mô tả trong các định nghĩa chức năng phần. Khi khối mã thực thi câu lệnh

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
16, điều này chỉ định giá trị trả về của lệnh gọi hàm.Function definitions. When the code block executes a
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
16 statement, this specifies the return value of the function call.

một chức năng hoặc phương pháp tích hợp:

Kết quả là tùy thuộc vào thông dịch viên; Xem các chức năng tích hợp cho các mô tả về các chức năng và phương pháp tích hợp.Built-in Functions for the descriptions of built-in functions and methods.

Một đối tượng lớp:

Một ví dụ mới của lớp đó được trả về.

Phương thức thể hiện lớp:

Hàm do người dùng định nghĩa tương ứng được gọi, với một danh sách đối số dài hơn danh sách đối số của cuộc gọi: phiên bản trở thành đối số đầu tiên.

Một phiên bản lớp:

Lớp phải xác định phương pháp

name ::=  othername
87; Hiệu ứng sau đó giống như khi phương pháp đó được gọi.

6.4. Đang chờ biểu thứcAwait expression¶

Đình chỉ việc thực hiện coroutine trên một đối tượng có thể chờ đợi. Chỉ có thể được sử dụng bên trong một chức năng coroutine.coroutine on an awaitable object. Can only be used inside a coroutine function.

name ::=  othername
9

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

6.5. Nhà điều hành điệnThe power operator¶

Toán tử năng lượng liên kết chặt chẽ hơn các toán tử Unary ở bên trái của nó; Nó liên kết ít chặt chẽ hơn so với các toán tử Unary ở bên phải của nó. Cú pháp là:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
0

Do đó, trong một chuỗi các toán tử năng lượng và các toán tử đơn không được đánh giá từ phải sang trái (điều này không hạn chế thứ tự đánh giá cho các toán hạng):

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
18 dẫn đến
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
19.

Toán tử năng lượng có cùng ngữ nghĩa với hàm

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
20 tích hợp, khi được gọi với hai đối số: nó mang lại đối số bên trái của nó được nâng lên cho sức mạnh của đối số bên phải của nó. Các đối số số lần đầu tiên được chuyển đổi thành một loại chung và kết quả là loại đó.

Đối với các toán hạng INT, kết quả có cùng loại với các toán hạng trừ khi đối số thứ hai là âm; Trong trường hợp đó, tất cả các đối số được chuyển đổi thành float và kết quả nổi được phân phối. Ví dụ:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
21 trả về
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
22, nhưng
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
23 trả về
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
24.

Tăng

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
25 lên một sức mạnh tiêu cực dẫn đến
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
26. Tăng một số âm cho một công suất phân số dẫn đến số
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
27. (Trong các phiên bản trước, nó đã tăng
name ::=  othername
03.)

Hoạt động này có thể được tùy chỉnh bằng phương pháp

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
29 đặc biệt.

6.6. Các hoạt động không theo số học và bitwise khôngUnary arithmetic and bitwise operations¶

Tất cả các hoạt động số học và bitwise không có cùng ưu tiên:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
1

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
30 (trừ) unary đưa ra sự phủ định của đối số số của nó; Hoạt động có thể được ghi đè với phương pháp đặc biệt
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
31.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
32 (cộng) không thay đổi đối số số của nó; Hoạt động có thể được ghi đè với phương pháp đặc biệt
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
33.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
34 (đảo ngược) không mang lại sự đảo ngược bitwise của đối số số nguyên của nó. Sự đảo ngược bitwise của
name ::=  othername
78 được định nghĩa là
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
36. Nó chỉ áp dụng cho các số tích hợp hoặc cho các đối tượng tùy chỉnh ghi đè phương thức đặc biệt
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
37.

Trong cả ba trường hợp, nếu đối số không có loại thích hợp, ngoại lệ

generator_expression ::=  "(" expression comp_for ")"
5 sẽ được nêu ra.

6.7. Hoạt động số học nhị phânBinary arithmetic operations¶

Các hoạt động số học nhị phân có mức độ ưu tiên thông thường. Lưu ý rằng một số hoạt động này cũng áp dụng cho một số loại không phải là số. Ngoài toán tử điện, chỉ có hai cấp độ, một cấp cho các toán tử nhân và một cho toán tử phụ gia:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
2

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
11 (phép nhân) mang lại sản phẩm của các đối số của nó. Các đối số phải cả hai là số hoặc một đối số phải là một số nguyên và một đối số phải là một chuỗi. Trong trường hợp trước, các số được chuyển đổi thành một loại chung và sau đó nhân với nhau. Trong trường hợp sau, sự lặp lại trình tự được thực hiện; Một yếu tố lặp lại tiêu cực mang lại một chuỗi trống.

Hoạt động này có thể được tùy chỉnh bằng các phương thức

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
40 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
41 đặc biệt.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
42 (AT) được dự định sẽ được sử dụng để nhân ma trận. Không có loại Python xây dựng thực hiện toán tử này.

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

Các nhà khai thác

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
43 (bộ phận) và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
44 (phân chia sàn) mang lại thương số cho các lập luận của họ. Các đối số số lần đầu tiên được chuyển đổi thành một loại chung. Sự phân chia số nguyên mang lại một chiếc phao, trong khi phân chia sàn của số nguyên dẫn đến một số nguyên; Kết quả là sự phân chia toán học với chức năng ‘sàn được áp dụng cho kết quả. Phân chia theo 0 làm tăng ngoại lệ
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
26.

Hoạt động này có thể được tùy chỉnh bằng các phương thức

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
46 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
47 đặc biệt.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
48 (modulo) mang lại phần còn lại từ sự phân chia của đối số đầu tiên theo thứ hai. Các đối số số lần đầu tiên được chuyển đổi thành một loại chung. Một đối số đúng không làm tăng ngoại lệ
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
26. Các đối số có thể là số điểm nổi, ví dụ:
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
50 bằng
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
51 (vì
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
52 bằng
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
53.) Toán tử modulo luôn mang lại kết quả với cùng một dấu hiệu với toán hạng thứ hai của nó (hoặc không); Giá trị tuyệt đối của kết quả nhỏ hơn hoàn toàn so với giá trị tuyệt đối của toán hạng thứ hai 1.

Các toán tử phân chia sàn và các toán tử modulo được kết nối bằng danh tính sau:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
54. Phân chia sàn và modulo cũng được kết nối với chức năng tích hợp
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
55:
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
56. 2.

Ngoài việc thực hiện thao tác modulo trên các số, toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
48 cũng bị quá tải bởi các đối tượng chuỗi để thực hiện định dạng chuỗi kiểu cũ (còn được gọi là nội suy). Cú pháp cho định dạng chuỗi được mô tả trong tham chiếu thư viện Python, phần định dạng chuỗi kiểu printf.printf-style String Formatting.

Hoạt động modulo có thể được tùy chỉnh bằng phương pháp

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
58 đặc biệt.

Toán tử phân chia sàn, toán tử modulo và hàm

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
55 không được xác định cho các số phức. Thay vào đó, hãy chuyển đổi thành số điểm nổi bằng hàm
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
60 nếu thích hợp.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
32 (bổ sung) mang lại tổng số đối số của nó. Các đối số phải cả hai là số hoặc cả hai là chuỗi cùng loại. Trong trường hợp trước, các số được chuyển đổi thành một loại chung và sau đó được thêm vào với nhau. Trong trường hợp sau, các chuỗi được nối.

Hoạt động này có thể được tùy chỉnh bằng các phương thức

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
62 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
63 đặc biệt.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
30 (phép trừ) mang lại sự khác biệt của các đối số của nó. Các đối số số lần đầu tiên được chuyển đổi thành một loại chung.

Hoạt động này có thể được tùy chỉnh bằng phương pháp

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
65 đặc biệt.

6.8. Hoạt động thay đổiShifting operations¶

Các hoạt động thay đổi được ưu tiên thấp hơn các hoạt động số học:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
3

Các nhà khai thác chấp nhận số nguyên làm đối số. Họ chuyển đối số đầu tiên sang trái hoặc phải theo số lượng bit được đưa ra bởi đối số thứ hai.

Hoạt động này có thể được tùy chỉnh bằng các phương thức

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
66 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
67 đặc biệt.

Một sự thay đổi đúng bởi n bit được định nghĩa là phân chia sàn bởi

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
68. Một sự thay đổi bên trái theo n bit được định nghĩa là nhân với
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
68.

6.9. Hoạt động bitwise nhị phânBinary bitwise operations¶

Mỗi trong ba hoạt động bitwise có mức độ ưu tiên khác nhau:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
4

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
70 mang lại bitwise và của các đối số của nó, phải là số nguyên hoặc một trong số chúng phải là một đối tượng tùy chỉnh ghi đè
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
71 hoặc
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
72 Các phương thức đặc biệt.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
73 mang lại XOR bitwise (độc quyền hoặc) của các đối số của nó, phải là số nguyên hoặc một trong số chúng phải là một đối tượng tùy chỉnh ghi đè lên các phương thức đặc biệt
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
74 hoặc
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
75.

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
76 mang lại bitwise (bao gồm) hoặc của các đối số của nó, phải là số nguyên hoặc một trong số chúng phải là một đối tượng tùy chỉnh ghi đè
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
77 hoặc
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
78 Các phương thức đặc biệt.

6.10. So sánh lorComparisons¶

Không giống như C, tất cả các hoạt động so sánh trong Python đều có cùng mức độ ưu tiên, thấp hơn so với bất kỳ hoạt động số học, dịch chuyển hoặc bitwise nào. Cũng không giống như C, các biểu thức như

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
79 có cách giải thích thông thường trong toán học:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
5

So sánh mang lại giá trị boolean:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80 hoặc
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81. Phương pháp so sánh phong phú tùy chỉnh có thể trả về các giá trị phi Boolean. Trong trường hợp này, Python sẽ gọi
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
82 về giá trị đó trong bối cảnh Boolean.

So sánh có thể được chuỗi tùy ý, ví dụ,

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
83 tương đương với
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
84, ngoại trừ
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
85 chỉ được đánh giá một lần (nhưng trong cả hai trường hợp
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
86 không được đánh giá khi
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
87 được tìm thấy là sai).

Chính thức, nếu A, B, C, xông, Y, Z là biểu thức và OP1, OP2, Mạnh, OPN là các toán tử so sánh, sau đó

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
88 tương đương với
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
89, ngoại trừ mỗi biểu thức được đánh giá nhiều nhất một lần.

Lưu ý rằng

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
90 không có nghĩa là bất kỳ loại so sánh nào giữa A và C, do đó, ví dụ,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
91 là hoàn toàn hợp pháp (mặc dù có lẽ không đẹp).

6.10.1. So sánh giá trịValue comparisons¶

Các toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
92,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
93,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
94,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
95,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
96 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
97 So sánh các giá trị của hai đối tượng. Các đối tượng không cần phải có cùng loại.

Các đối tượng, giá trị và loại chương nói rằng các đối tượng có giá trị (ngoài loại và danh tính). Giá trị của một đối tượng là một khái niệm khá trừu tượng trong Python: ví dụ, không có phương thức truy cập kinh điển nào cho một giá trị đối tượng. Ngoài ra, không có yêu cầu rằng giá trị của một đối tượng nên được xây dựng theo một cách cụ thể, ví dụ: bao gồm tất cả các thuộc tính dữ liệu của nó. Các toán tử so sánh thực hiện một khái niệm cụ thể về giá trị của một đối tượng là gì. Người ta có thể nghĩ về chúng là xác định giá trị của một đối tượng một cách gián tiếp, bằng cách thực hiện so sánh của chúng.Objects, values and types states that objects have a value (in addition to type and identity). The value of an object is a rather abstract notion in Python: For example, there is no canonical access method for an object’s value. Also, there is no requirement that the value of an object should be constructed in a particular way, e.g. comprised of all its data attributes. Comparison operators implement a particular notion of what the value of an object is. One can think of them as defining the value of an object indirectly, by means of their comparison implementation.

Bởi vì tất cả các loại là các phân nhóm (trực tiếp hoặc gián tiếp) của

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
98, chúng thừa hưởng hành vi so sánh mặc định từ
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
98. Các loại có thể tùy chỉnh hành vi so sánh của chúng bằng cách thực hiện các phương pháp so sánh phong phú như
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
00, được mô tả trong tùy chỉnh cơ bản.Basic customization.

Hành vi mặc định để so sánh bình đẳng (

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
94 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
97) dựa trên danh tính của các đối tượng. Do đó, so sánh bình đẳng của các trường hợp có cùng nhận dạng dẫn đến sự bình đẳng và so sánh bình đẳng của các trường hợp với các danh tính khác nhau dẫn đến bất bình đẳng. Một động lực cho hành vi mặc định này là mong muốn rằng tất cả các đối tượng phải là phản xạ (nghĩa là
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
03 ngụ ý
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
04).

Một so sánh đơn hàng mặc định (

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
92,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
93,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
96 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
95) không được cung cấp; Một nỗ lực tăng
generator_expression ::=  "(" expression comp_for ")"
5. Một động lực cho hành vi mặc định này là thiếu một bất biến tương tự như đối với sự bình đẳng.

Hành vi của so sánh bình đẳng mặc định, rằng các trường hợp với các danh tính khác nhau luôn không đồng đều, có thể trái ngược với những loại sẽ cần có định nghĩa hợp lý về giá trị đối tượng và bình đẳng dựa trên giá trị. Các loại như vậy sẽ cần phải tùy chỉnh hành vi so sánh của họ, và trên thực tế, một số loại tích hợp đã thực hiện điều đó.

Danh sách sau đây mô tả hành vi so sánh của các loại tích hợp quan trọng nhất.

  • Số lượng các loại số tích hợp (loại số-int, float, phức tạp) và các loại thư viện tiêu chuẩn

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    10 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    11 có thể được so sánh trong và trên các loại của chúng, với hạn chế các số phức không hỗ trợ so sánh thứ tự. Trong giới hạn của các loại liên quan, chúng so sánh chính xác về mặt toán học (về mặt thuật toán) mà không mất độ chính xác.Numeric Types — int, float, complex) and of the standard library types
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    10 and
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    11 can be compared within and across their types, with the restriction that complex numbers do not support order comparison. Within the limits of the types involved, they compare mathematically (algorithmically) correct without loss of precision.

    Các giá trị không phải là một số

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    12 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    13 là đặc biệt. Bất kỳ sự so sánh được đặt hàng của một số với một giá trị không một số là sai. Một hàm ý phản trực giác là các giá trị không phải là một số không bằng với chính chúng. Ví dụ: nếu
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    14,
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    15,
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    16 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    17 đều sai, trong khi
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    18 là đúng. Hành vi này tuân thủ IEEE 754.

  • dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
    key_datum_list     ::=  key_datum ("," key_datum)* [","]
    key_datum          ::=  expression ":" expression | "**" or_expr
    dict_comprehension ::=  expression ":" expression comp_for
    
    5 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    20 là những người độc thân. PEP 8 khuyên rằng nên so sánh cho các singletons luôn luôn được thực hiện với
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    21 hoặc
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    22, không bao giờ là nhà khai thác bình đẳng.PEP 8 advises that comparisons for singletons should always be done with
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    21 or
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    22, never the equality operators.

  • Trình tự nhị phân (các trường hợp của

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    23 hoặc
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    24) có thể được so sánh trong và trên các loại của chúng. Họ so sánh từ vựng bằng cách sử dụng các giá trị số của các yếu tố của chúng.

  • Các chuỗi (các trường hợp của

    name ::=  othername
    
    73) so sánh từ vựng bằng cách sử dụng các điểm mã unicode số (kết quả của hàm tích hợp
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    26) của các ký tự của chúng. 3

    Chuỗi và trình tự nhị phân không thể được so sánh trực tiếp.

  • Trình tự (các trường hợp của

    name ::=  othername
    
    68,
    name ::=  othername
    
    74 hoặc
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    29) chỉ có thể được so sánh trong mỗi loại của chúng, với hạn chế rằng phạm vi không hỗ trợ so sánh thứ tự. So sánh bình đẳng giữa các loại này dẫn đến bất bình đẳng và việc so sánh đặt hàng giữa các loại này tăng
    generator_expression ::=  "(" expression comp_for ")"
    
    5.

    Trình tự so sánh từ vựng bằng cách sử dụng so sánh các yếu tố tương ứng. Các thùng chứa tích hợp thường giả sử các đối tượng giống hệt nhau bằng với chính chúng. Điều đó cho phép họ bỏ qua các bài kiểm tra bình đẳng cho các đối tượng giống hệt nhau để cải thiện hiệu suất và duy trì các bất biến nội bộ của chúng.

    So sánh từ vựng giữa các bộ sưu tập tích hợp hoạt động như sau:

    • Đối với hai bộ sưu tập để so sánh bằng nhau, chúng phải cùng loại, có cùng độ dài và mỗi cặp phần tử tương ứng phải so sánh bằng nhau (ví dụ,

      literal ::=  stringliteral | bytesliteral
                   | integer | floatnumber | imagnumber
      
      31 là sai vì loại không giống nhau).

    • Các bộ sưu tập hỗ trợ so sánh thứ tự được đặt hàng giống như các yếu tố không đồng đều đầu tiên của chúng (ví dụ,

      literal ::=  stringliteral | bytesliteral
                   | integer | floatnumber | imagnumber
      
      32 có cùng giá trị với
      literal ::=  stringliteral | bytesliteral
                   | integer | floatnumber | imagnumber
      
      33). Nếu một phần tử tương ứng không tồn tại, bộ sưu tập ngắn hơn được đặt hàng đầu tiên (ví dụ:
      literal ::=  stringliteral | bytesliteral
                   | integer | floatnumber | imagnumber
      
      34 là đúng).

  • Ánh xạ (các trường hợp của

    name ::=  othername
    
    70) so sánh bằng nhau khi và chỉ khi chúng có các cặp ____336 bằng nhau. So sánh bình đẳng của các khóa và giá trị thực thi tính phản xạ.

    So sánh đơn hàng (

    atom      ::=  identifier | literal | enclosure
    enclosure ::=  parenth_form | list_display | dict_display | set_display
                   | generator_expression | yield_atom
    
    92,
    atom      ::=  identifier | literal | enclosure
    enclosure ::=  parenth_form | list_display | dict_display | set_display
                   | generator_expression | yield_atom
    
    93,
    atom      ::=  identifier | literal | enclosure
    enclosure ::=  parenth_form | list_display | dict_display | set_display
                   | generator_expression | yield_atom
    
    96 và
    atom      ::=  identifier | literal | enclosure
    enclosure ::=  parenth_form | list_display | dict_display | set_display
                   | generator_expression | yield_atom
    
    95) tăng
    generator_expression ::=  "(" expression comp_for ")"
    
    5.

  • Các bộ (các trường hợp của

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    42 hoặc
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    43) có thể được so sánh trong và trên các loại của chúng.

    Họ xác định các toán tử so sánh đơn hàng có nghĩa là các bài kiểm tra tập hợp con và superset. Những mối quan hệ này không xác định tổng số đặt hàng (ví dụ: hai bộ

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    44 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    45 không bằng nhau, cũng không phải là tập hợp của nhau, cũng không phải là siêu của nhau). Theo đó, các bộ không phải là đối số phù hợp cho các chức năng phụ thuộc vào tổng số đặt hàng (ví dụ:
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    46,
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    47 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    48 tạo ra kết quả không xác định được đưa ra danh sách các bộ làm đầu vào).

    So sánh các bộ thực thi tính phản xạ của các yếu tố của nó.

  • Hầu hết các loại tích hợp khác không có phương pháp so sánh được thực hiện, vì vậy chúng thừa hưởng hành vi so sánh mặc định.

Các lớp do người dùng xác định tùy chỉnh hành vi so sánh của họ nên tuân theo một số quy tắc nhất quán, nếu có thể:

  • So sánh bình đẳng nên là phản xạ. Nói cách khác, các đối tượng giống hệt nhau nên so sánh bằng nhau:

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    03 ngụ ý
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    04

  • So sánh nên đối xứng. Nói cách khác, các biểu thức sau đây phải có cùng kết quả:

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    04 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    52

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    53 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    54

    atom      ::=  identifier | literal | enclosure
    enclosure ::=  parenth_form | list_display | dict_display | set_display
                   | generator_expression | yield_atom
    
    87 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    56

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    33 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    58

  • So sánh nên được chuyển tiếp. Các ví dụ sau (không khởi công) minh họa rằng:

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    59 ngụ ý
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    60

    atom      ::=  identifier | literal | enclosure
    enclosure ::=  parenth_form | list_display | dict_display | set_display
                   | generator_expression | yield_atom
    
    84 ngụ ý
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    62

  • So sánh nghịch đảo nên dẫn đến phủ định boolean. Nói cách khác, các biểu thức sau đây phải có cùng kết quả:

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    04 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    64

    atom      ::=  identifier | literal | enclosure
    enclosure ::=  parenth_form | list_display | dict_display | set_display
                   | generator_expression | yield_atom
    
    87 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    66 (để đặt hàng tổng số)

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    67 và
    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    68 (để đặt hàng tổng số)

    Hai biểu thức cuối cùng áp dụng cho các bộ sưu tập hoàn toàn được đặt hàng (ví dụ: các chuỗi, nhưng không đặt ra các bộ hoặc ánh xạ). Xem thêm Công cụ trang trí

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    69.

  • Kết quả

    literal ::=  stringliteral | bytesliteral
                 | integer | floatnumber | imagnumber
    
    70 phải phù hợp với sự bình đẳng. Các đối tượng bằng nhau nên có cùng giá trị băm, hoặc được đánh dấu là không thể.

Python không thực thi các quy tắc nhất quán này. Trên thực tế, các giá trị không có số là một ví dụ cho việc không tuân theo các quy tắc này.

6.10.2. Hoạt động kiểm tra thành viênMembership test operations¶

Các nhà khai thác

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
71 và
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
72 Kiểm tra thành viên.
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
73 đánh giá thành
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80 nếu X là thành viên của S và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81 khác.
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
76 Trả về sự phủ định của
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
77. Tất cả các chuỗi tích hợp và các loại đặt hỗ trợ điều này cũng như từ điển, trong đó
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
71 kiểm tra xem từ điển có khóa nhất định hay không. Đối với các loại container như Danh sách, Tuple, Set, Frozenset, Dict hoặc Collections.Deque, biểu thức
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
79 tương đương với
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
80.

Đối với các loại chuỗi và byte,

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
79 là
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80 khi và chỉ khi x là một chuỗi con của y. Một thử nghiệm tương đương là
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
83. Các chuỗi trống luôn được coi là một chuỗi con của bất kỳ chuỗi nào khác, do đó
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
84 sẽ trả về
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80.

Đối với các lớp do người dùng xác định xác định phương thức

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
86,
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
87 trả về
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80 nếu
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
89 trả về giá trị thực và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81 khác.

Đối với các lớp do người dùng xác định không xác định

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
86 nhưng xác định
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
92,
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
79 là
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80 nếu một số giá trị
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
86, trong đó biểu thức
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
96 là đúng, được tạo ra trong khi lặp lại trên
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
85. Nếu một ngoại lệ được nâng lên trong quá trình lặp, như thể
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
71 đã nêu ra ngoại lệ đó.

Cuối cùng, giao thức lặp kiểu cũ được thử: nếu một lớp xác định

name ::=  othername
64,
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
79 là
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80 khi và chỉ khi có chỉ số số nguyên không âm I sao cho
parenth_form ::=  "(" [starred_expression] ")"
02 và không có chỉ số số nguyên thấp hơn làm tăng ngoại lệ
parenth_form ::=  "(" [starred_expression] ")"
03. (Nếu bất kỳ ngoại lệ nào khác được nâng lên, như thể
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
71 đã nêu ra ngoại lệ đó).

Nhà điều hành

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
72 được xác định là có giá trị sự thật nghịch đảo là
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
71.

6.10.3. So sánh danh tínhIdentity comparisons¶

Các toán tử

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
21 và
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
22 Kiểm tra cho một đối tượng Nhận dạng:
parenth_form ::=  "(" [starred_expression] ")"
09 là đúng khi và chỉ khi X và Y là cùng một đối tượng. Danh tính đối tượng được xác định bằng cách sử dụng hàm
parenth_form ::=  "(" [starred_expression] ")"
10.
parenth_form ::=  "(" [starred_expression] ")"
11 mang lại giá trị sự thật nghịch đảo. 4

6.11. Hoạt động BooleanBoolean operations¶

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
6

Trong bối cảnh của các hoạt động boolean và cả khi các biểu thức được sử dụng bởi các câu lệnh luồng điều khiển, các giá trị sau được hiểu là sai:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81,
dict_display       ::=  "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::=  key_datum ("," key_datum)* [","]
key_datum          ::=  expression ":" expression | "**" or_expr
dict_comprehension ::=  expression ":" expression comp_for
5, số 0 của tất cả , bộ và đông lạnh). Tất cả các giá trị khác được hiểu là đúng. Các đối tượng do người dùng xác định có thể tùy chỉnh giá trị sự thật của chúng bằng cách cung cấp phương thức
parenth_form ::=  "(" [starred_expression] ")"
14.

Nhà điều hành

parenth_form ::=  "(" [starred_expression] ")"
15 mang lại
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80 nếu đối số của nó là sai,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81 khác.

Biểu thức

parenth_form ::=  "(" [starred_expression] ")"
18 đầu tiên đánh giá x; Nếu x là sai, giá trị của nó được trả về; Mặt khác, y được đánh giá và giá trị kết quả được trả về.

Biểu thức

parenth_form ::=  "(" [starred_expression] ")"
19 đầu tiên đánh giá x; Nếu x là đúng, giá trị của nó được trả về; Mặt khác, y được đánh giá và giá trị kết quả được trả về.

Lưu ý rằng cả

parenth_form ::=  "(" [starred_expression] ")"
20 và
parenth_form ::=  "(" [starred_expression] ")"
21 đều không hạn chế giá trị và loại họ trở lại
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81 và
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
80, mà thay vào đó trả về đối số được đánh giá cuối cùng. Điều này đôi khi hữu ích, ví dụ: nếu
parenth_form ::=  "(" [starred_expression] ")"
24 là một chuỗi cần được thay thế bằng giá trị mặc định nếu trống, biểu thức
parenth_form ::=  "(" [starred_expression] ")"
25 mang lại giá trị mong muốn. Vì
parenth_form ::=  "(" [starred_expression] ")"
15 phải tạo ra một giá trị mới, nó trả về giá trị boolean bất kể loại đối số của nó (ví dụ:
parenth_form ::=  "(" [starred_expression] ")"
27 tạo ra
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81 thay vì
parenth_form ::=  "(" [starred_expression] ")"
29.)

6.12. Biểu thức phân côngAssignment expressions¶

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
7

Một biểu thức gán (đôi khi còn được gọi là một biểu thức có tên là hay hay Walrus Walrus) gán một

name ::=  othername
97 cho
parenth_form ::=  "(" [starred_expression] ")"
31, đồng thời trả về giá trị của
name ::=  othername
97.

Một trường hợp sử dụng phổ biến là khi xử lý các biểu thức thông thường phù hợp:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
8

Hoặc, khi xử lý luồng tệp trong các đoạn:

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
9

Các biểu thức gán phải được bao quanh bởi dấu ngoặc đơn khi được sử dụng làm biểu hiện phụ trong việc cắt lát, có điều kiện, lambda, từ khóa và biểu thức hiểu và hiểu và trong các câu lệnh

parenth_form ::=  "(" [starred_expression] ")"
33 và
parenth_form ::=  "(" [starred_expression] ")"
34. Ở tất cả các nơi khác mà chúng có thể được sử dụng, dấu ngoặc đơn không bắt buộc, bao gồm cả trong các câu lệnh
parenth_form ::=  "(" [starred_expression] ")"
3 và
parenth_form ::=  "(" [starred_expression] ")"
36.

Mới trong phiên bản 3.8: Xem PEP 572 để biết thêm chi tiết về các biểu thức gán.See PEP 572 for more details about assignment expressions.

6.13. Biểu thức có điều kiệnConditional expressions¶

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
0

Các biểu thức có điều kiện (đôi khi được gọi là toán tử ternary của người Hồi giáo) có mức độ ưu tiên thấp nhất trong tất cả các hoạt động của Python.

Biểu thức

parenth_form ::=  "(" [starred_expression] ")"
37 trước tiên đánh giá điều kiện, c chứ không phải x. Nếu C là đúng, x được đánh giá và giá trị của nó được trả về; Nếu không, y được đánh giá và giá trị của nó được trả về.

Xem PEP 308 để biết thêm chi tiết về biểu thức có điều kiện.PEP 308 for more details about conditional expressions.

6.14. Lambdas¶Lambdas¶

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
1

Các biểu thức Lambda (đôi khi được gọi là dạng lambda) được sử dụng để tạo các hàm ẩn danh. Biểu thức

parenth_form ::=  "(" [starred_expression] ")"
38 mang lại một đối tượng hàm. Đối tượng không tên hoạt động giống như một đối tượng hàm được xác định với:

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
2

Xem phần Định nghĩa chức năng cho cú pháp của danh sách tham số. Lưu ý rằng các chức năng được tạo bằng các biểu thức Lambda không thể chứa các câu lệnh hoặc chú thích.Function definitions for the syntax of parameter lists. Note that functions created with lambda expressions cannot contain statements or annotations.

6.15. Danh sách biểu hiệnExpression lists¶

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
3

Ngoại trừ khi một phần của danh sách hoặc màn hình đặt, một danh sách biểu thức chứa ít nhất một dấu phẩy mang lại một tuple. Độ dài của tuple là số lượng biểu thức trong danh sách. Các biểu thức được đánh giá từ trái sang phải.

Một dấu hoa thị

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
11 biểu thị khả năng giải nén có thể lặp lại. Toán tử của nó phải là một điều không thể. Các ITEBLE được mở rộng thành một chuỗi các mục, được bao gồm trong bộ tuple, danh sách hoặc bộ mới, tại trang web của việc giải nén.iterable. The iterable is expanded into a sequence of items, which are included in the new tuple, list, or set, at the site of the unpacking.

Mới trong phiên bản 3.5: Khả năng giải nén trong danh sách biểu thức, ban đầu được đề xuất bởi PEP 448.Iterable unpacking in expression lists, originally proposed by PEP 448.

Dấu phẩy kéo dài chỉ được yêu cầu để tạo ra một tuple duy nhất (a.k.a. một singleton); Đó là tùy chọn trong tất cả các trường hợp khác. Một biểu thức duy nhất không có dấu phẩy kéo dài không tạo ra một tuple, mà là mang lại giá trị của biểu thức đó. (Để tạo một tuple trống, hãy sử dụng một cặp dấu ngoặc đơn trống:

parenth_form ::=  "(" [starred_expression] ")"
40.)

6.16. Đơn đặt hàng đánh giáEvaluation order¶

Python đánh giá các biểu thức từ trái sang phải. Lưu ý rằng trong khi đánh giá một nhiệm vụ, phía bên phải được đánh giá trước phía bên trái.

Trong các dòng sau, các biểu thức sẽ được đánh giá theo thứ tự số học của hậu tố của chúng:

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
4

6.17. Ưu tiên điều hành¶Operator precedence¶

Bảng sau đây tóm tắt sự ưu tiên của toán tử trong Python, từ ưu tiên cao nhất (nhất là ràng buộc) đến ưu tiên thấp nhất (ít ràng buộc nhất). Người vận hành trong cùng một hộp có cùng mức độ ưu tiên. Trừ khi cú pháp được đưa ra một cách rõ ràng, các toán tử là nhị phân. Các toán tử trong cùng một nhóm hộp từ trái sang phải (ngoại trừ các biểu thức số liệu và có điều kiện, nhóm từ phải sang trái).

Lưu ý rằng so sánh, kiểm tra thành viên và kiểm tra danh tính, tất cả đều có cùng mức độ ưu tiên và có tính năng chuỗi từ trái sang phải như được mô tả trong phần so sánh.Comparisons section.

Nhà điều hành

Sự mô tả

parenth_form ::=  "(" [starred_expression] ")"
41,

parenth_form ::=  "(" [starred_expression] ")"
42,
parenth_form ::=  "(" [starred_expression] ")"
43,
parenth_form ::=  "(" [starred_expression] ")"
44

Biểu thức ràng buộc hoặc dấu ngoặc đơn, hiển thị danh sách, hiển thị từ điển, đặt màn hình

parenth_form ::=  "(" [starred_expression] ")"
45,
parenth_form ::=  "(" [starred_expression] ")"
46,
parenth_form ::=  "(" [starred_expression] ")"
47,
parenth_form ::=  "(" [starred_expression] ")"
48

Đăng ký, cắt, cuộc gọi, tham chiếu thuộc tính

parenth_form ::=  "(" [starred_expression] ")"
49

Đang chờ biểu hiện

list_display ::=  "[" [starred_list | comprehension] "]"
6

Số mũ 5

parenth_form ::=  "(" [starred_expression] ")"
51,
parenth_form ::=  "(" [starred_expression] ")"
52,
parenth_form ::=  "(" [starred_expression] ")"
53

Tích cực, tiêu cực, bitwise không

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
11,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
42,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
43,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
44,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
48

Phép nhân, phép nhân ma trận, phân chia, phân chia sàn, phần còn lại 6

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
32,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
30

Cộng và trừ

parenth_form ::=  "(" [starred_expression] ")"
61,
parenth_form ::=  "(" [starred_expression] ")"
62

Sự thay đổi

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
70

Bitwise và

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
73

BitWise XOR

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
76

Bitwise hoặc

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
71,
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
72,
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
21,
literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
22,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
92,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
96,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
93,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
95,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
97,
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
94

So sánh, bao gồm các bài kiểm tra thành viên và bài kiểm tra danh tính

parenth_form ::=  "(" [starred_expression] ")"
76

Boolean không

parenth_form ::=  "(" [starred_expression] ")"
20

Boolean và

parenth_form ::=  "(" [starred_expression] ")"
21

Boolean hoặc

parenth_form ::=  "(" [starred_expression] ")"
3 -
parenth_form ::=  "(" [starred_expression] ")"
80

Biểu thức điều kiện

parenth_form ::=  "(" [starred_expression] ")"
81

Biểu hiện Lambda

parenth_form ::=  "(" [starred_expression] ")"
82

Biểu thức gán

Chú thích

1

Mặc dù

parenth_form ::=  "(" [starred_expression] ")"
83 là toán học thực sự, nhưng đối với các phao có thể không đúng về số lượng do Roundoff. Ví dụ, và giả sử một nền tảng mà một chiếc phao python là số chính xác kép của IEEE 754, để
parenth_form ::=  "(" [starred_expression] ")"
84 có cùng dấu với
parenth_form ::=  "(" [starred_expression] ")"
85, kết quả được tính toán là
parenth_form ::=  "(" [starred_expression] ")"
86, có số bằng số bằng
parenth_form ::=  "(" [starred_expression] ")"
85. Hàm
parenth_form ::=  "(" [starred_expression] ")"
88 trả về một kết quả có dấu hiệu khớp với dấu hiệu của đối số đầu tiên và do đó trả về
parenth_form ::=  "(" [starred_expression] ")"
89 trong trường hợp này. Cách tiếp cận nào phù hợp hơn phụ thuộc vào ứng dụng.

2

Nếu x rất gần với bội số chính xác của y, thì

parenth_form ::=  "(" [starred_expression] ")"
90 có thể lớn hơn
parenth_form ::=  "(" [starred_expression] ")"
91 do làm tròn. Trong những trường hợp như vậy, Python trả về kết quả sau, để bảo tồn rằng
parenth_form ::=  "(" [starred_expression] ")"
92 rất gần với
name ::=  othername
78.

3

Tiêu chuẩn Unicode phân biệt giữa các điểm mã (ví dụ: U+0041) và các ký tự trừu tượng (ví dụ: chữ hoa Latin Latin A). Mặc dù hầu hết các ký tự trừu tượng trong Unicode chỉ được biểu diễn bằng một điểm mã, có một số ký tự trừu tượng có thể được biểu diễn bằng cách sử dụng một chuỗi nhiều hơn một điểm mã. Ví dụ, ký tự trừu tượng chữ Latin Latin Capital C với Cedilla có thể được biểu diễn dưới dạng một ký tự được định trước duy nhất tại vị trí mã U+00C7, hoặc là một chuỗi của một ký tự cơ sở tại vị trí mã U+0043 (chữ cái Latin Capital C), tiếp theo là một ký tự kết hợp tại vị trí mã U+0327 (kết hợp Cedilla).

Các toán tử so sánh trên các chuỗi so sánh ở cấp độ của các điểm mã Unicode. Điều này có thể phản trực giác với con người. Ví dụ,

parenth_form ::=  "(" [starred_expression] ")"
94 là
atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
81, mặc dù cả hai chuỗi đều đại diện cho cùng một ký tự trừu tượng chữ Latin Latin Capital C với Cedilla.

Để so sánh các chuỗi ở cấp độ của các ký tự trừu tượng (nghĩa là, theo cách trực quan với con người), sử dụng

parenth_form ::=  "(" [starred_expression] ")"
96.

4

Do thu thập rác tự động, danh sách miễn phí và tính chất động của các mô tả, bạn có thể nhận thấy hành vi dường như bất thường trong một số cách sử dụng của toán tử

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber
21, giống như những người liên quan đến so sánh giữa các phương thức thể hiện hoặc hằng số. Kiểm tra tài liệu của họ để biết thêm thông tin.

5

Toán tử năng lượng

list_display ::=  "[" [starred_list | comprehension] "]"
6 liên kết ít chặt chẽ hơn một toán tử số học hoặc bitwise unary ở bên phải của nó, nghĩa là,
parenth_form ::=  "(" [starred_expression] ")"
99 là
comprehension ::=  assignment_expression comp_for
comp_for      ::=  ["async"] "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" or_test [comp_iter]
00.

6

Toán tử

atom      ::=  identifier | literal | enclosure
enclosure ::=  parenth_form | list_display | dict_display | set_display
               | generator_expression | yield_atom
48 cũng được sử dụng để định dạng chuỗi; Ưu tiên tương tự được áp dụng.

Giá trị của biểu thức 4 3 5 trong Python sẽ là gì?

Kết quả cho biểu thức [4 + 3 % 5] này là 7.7.

Giá trị của biểu thức 22 3 trong Python là gì?

4. Câu trả lời cho biểu thức này là gì, 22 % 3 là gì?Giải thích: Toán tử mô đun đưa ra phần còn lại.Vì vậy, 22%3 cho phần còn lại, nghĩa là 1.1.

Giá trị biểu thức trong Python là gì?

Một biểu thức là sự kết hợp của các toán tử và toán hạng được giải thích để tạo ra một số giá trị khác.Trong bất kỳ ngôn ngữ lập trình nào, một biểu thức được đánh giá theo mức độ ưu tiên của các nhà khai thác.a combination of operators and operands that is interpreted to produce some other value. In any programming language, an expression is evaluated as per the precedence of its operators.

Đầu ra của biểu thức 4 12 sẽ là gì?

Mẫu nhị phân là 4 là 0100 và là 12 là 1100. Do đó, 0100^1100 là 1000, bằng 8.8.