Con trăn lặp đi lặp lại

Câu lệnh vòng lặp while trong ngôn ngữ lập trình Python lặp đi lặp lại việc thực thi câu lệnh đích miễn là một điều kiện nhất định là đúng

cú pháp

Cú pháp của vòng lặp while trong ngôn ngữ lập trình Python là -

while expression:
   statement(s)

Ở đây, (các) câu lệnh có thể là một câu lệnh đơn lẻ hoặc một khối các câu lệnh. Điều kiện có thể là bất kỳ biểu thức nào và true là bất kỳ giá trị khác 0 nào. Vòng lặp lặp khi điều kiện đúng

Khi điều kiện trở thành sai, điều khiển chương trình chuyển đến dòng ngay sau vòng lặp

Trong Python, tất cả các câu lệnh được thụt vào bởi cùng một số khoảng cách ký tự sau cấu trúc lập trình được coi là một phần của một khối mã. Python sử dụng thụt đầu dòng làm phương pháp nhóm các câu lệnh

sơ đồ dòng chảy

Con trăn lặp đi lặp lại

Ở đây, điểm mấu chốt của vòng lặp while là vòng lặp có thể không bao giờ chạy. Khi điều kiện được kiểm tra và kết quả là sai, thân vòng lặp sẽ bị bỏ qua và câu lệnh đầu tiên sau vòng lặp while sẽ được thực thi

Thí dụ

Bản trình diễn trực tiếp
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!

Khối ở đây, bao gồm các câu lệnh in và tăng, được thực hiện lặp đi lặp lại cho đến khi số đếm không nhỏ hơn 9. Với mỗi lần lặp lại, giá trị hiện tại của số lượng chỉ mục được hiển thị và sau đó tăng thêm 1

Vòng lặp vô hạn

Một vòng lặp trở thành vòng lặp vô hạn nếu một điều kiện không bao giờ trở thành FALSE. Bạn phải thận trọng khi sử dụng vòng lặp while vì có khả năng điều kiện này không bao giờ chuyển thành giá trị FALSE. Điều này dẫn đến một vòng lặp không bao giờ kết thúc. Một vòng lặp như vậy được gọi là một vòng lặp vô tận

Một vòng lặp vô hạn có thể hữu ích trong lập trình máy khách/máy chủ, nơi máy chủ cần chạy liên tục để các chương trình máy khách có thể giao tiếp với nó khi cần thiết

#!/usr/bin/python

var = 1
while var == 1 :  # This constructs an infinite loop
   num = raw_input("Enter a number  :")
   print "You entered: ", num

print "Good bye!"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt

Ví dụ trên diễn ra trong một vòng lặp vô hạn và bạn cần sử dụng CTRL+C để thoát khỏi chương trình

Sử dụng Tuyên bố khác với Vòng lặp While

Python hỗ trợ để có một câu lệnh khác được liên kết với một câu lệnh vòng lặp

  • Nếu câu lệnh khác được sử dụng với vòng lặp while, câu lệnh khác được thực thi khi điều kiện trở thành sai

Ví dụ sau minh họa sự kết hợp của câu lệnh other với câu lệnh while in ra một số miễn là nó nhỏ hơn 5, nếu không thì câu lệnh khác sẽ được thực thi

Bản trình diễn trực tiếp
#!/usr/bin/python

count = 0
while count < 5:
   print count, " is  less than 5"
   count = count + 1
else:
   print count, " is not less than 5"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5

Suite Độc Lập

Tương tự như cú pháp câu lệnh if, nếu mệnh đề while của bạn chỉ bao gồm một câu lệnh duy nhất, thì nó có thể được đặt trên cùng một dòng với tiêu đề while

Đây là cú pháp và ví dụ về mệnh đề while một dòng -

#!/usr/bin/python

flag = 1
while (flag): print 'Given flag is really true!'
print "Good bye!"

Tốt hơn là không thử ví dụ trên vì nó đi vào vòng lặp vô hạn và bạn cần nhấn tổ hợp phím CTRL+C để thoát

Ghi chú cú pháp. Trong chương này và các chương tiếp theo, 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ế của) quy tắc cú pháp có dạng

________số 8

và không có ngữ nghĩa nào được đưa ra, ngữ nghĩa của dạng

parenth_form ::=  "(" [starred_expression] ")"
4 này cũng giống như đối với
parenth_form ::=  "(" [starred_expression] ")"
5

6. 1. Chuyển đổi số học¶

Khi mô tả 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 phổ biến", đ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ì đối số kia được chuyển đổi thành số phức;

  • mặt khác, nếu một trong hai đối số là số dấu phẩy động, thì đối số kia được chuyển đổi thành dấu phẩy động;

  • mặt khác, 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 một số nhà khai thác nhất định (e. g. , một chuỗi làm đối số bên trái cho toán tử '%'). Các tiện ích mở rộng phải xác định hành vi chuyển đổi của riêng chúng

6. 2. Nguyên tử¶

Nguyên tử là phần 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 chữ. Các hình thức được đặt trong ngoặc đơn, dấu ngoặc hoặc dấu ngoặc nhọn cũng được phân loại theo cú pháp là nguyên tử. Cú pháp cho các nguyên tử là

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
1

6. 2. 1. Số nhận dạng (Tên)¶

Một định danh xuất hiện dưới dạng một nguyên tử là một cái tên. Xem phần Số nhận dạng và từ khóa để biết định nghĩa từ vựng và phần Đặt tên và ràng buộc để biết .

Khi tên được liên kết với một đối tượng, việc đánh giá nguyên tử sẽ 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ạo ra một ngoại lệ

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

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

parenth_form ::=  "(" [starred_expression] ")"
7 xuất hiện trong một lớp có tên
parenth_form ::=  "(" [starred_expression] ")"
8 sẽ được chuyển đổi thành
parenth_form ::=  "(" [starred_expression] ")"
9. Sự chuyển đổi này độc lập với ngữ cảnh cú pháp trong đó định danh được sử dụng. Nếu tên được chuyển đổi quá dài (dài hơn 255 ký tự), việc cắt bớt do triển khai xác định có thể xảy ra. Nếu tên lớp chỉ bao gồm dấu gạch dưới, thì không có chuyển đổi nào được thực hiện

6. 2. 2. Chữ¶

Python hỗ trợ các chuỗi ký tự và byte cũng như các ký tự số khác nhau

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
6

Đánh giá một chữ tạo ra một đối tượng thuộc loại đã cho (chuỗi, byte, số nguyên, số dấu phẩy động, số phức) với giá trị đã cho. Giá trị có thể được tính gần đúng trong trường hợp dấu phẩy động và ký tự ảo (phức tạp). Xem phần Chữ để biết chi tiết.

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

6. 2. 3. Biểu mẫu có dấu ngoặc đơn¶

Biểu mẫu có dấu ngoặc đơn là danh sách biểu thức tùy chọn được đặt trong dấu ngoặc đơn

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

Danh sách biểu thức được đặt trong ngoặc đơn mang lại bất kỳ thứ 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, thì nó tạo ra một bộ;

Một cặp dấu ngoặc rỗng tạo ra 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 nghĩa đen được áp dụng (i. e. , hai lần xuất hiện của bộ dữ liệu 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à bằng cách sử dụng dấu phẩy. Ngoại lệ là bộ dữ liệu trống, trong đó bắt buộc phải có dấu ngoặc đơn — việc cho phép “không có gì” không được đặt trong ngoặc đơn trong các biểu thức sẽ gây ra sự mơ hồ và cho phép các lỗi đánh máy phổ biến không được phát hiện

6. 2. 4. Hiển thị cho danh sách, bộ và từ điển¶

Để xây dựng một danh sách, một tập hợp hoặc một từ điển, Python cung cấp cú pháp đặc biệt gọi là "hiển thị", mỗi cú pháp có hai loại

  • nội dung vùng chứa đượ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à khả năng hiểu

Các yếu tố cú pháp phổ biến để hiểu là

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
8

Phần hiểu bao gồm một biểu thức duy nhất theo sau ít nhất một mệnh đề

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 và không hoặc nhiều mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 hoặc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
82. Trong trường hợp này, các phần tử của vùng chứa mới là những phần tử sẽ được tạo ra bằng cách coi mỗi mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 hoặc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
82 là một khối, lồng từ trái sang phải và đánh giá biểu thức để tạo ra một phần tử mỗi khi đạt đến khối trong cùng

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 ngoài cùng bên trái, việc hiểu được thực thi trong một phạm vi lồng nhau hoàn toàn riêng biệt. Điều này đảm bảo rằng các tên được gán trong danh sách mục tiêu không "rò rỉ" vào phạm vi kèm theo

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 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 dưới dạng đối số cho phạm vi được lồng hoàn toàn. Các mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 tiếp theo và bất kỳ điều kiện lọc nào trong mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 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ừ lần lặp ngoài cùng bên trái. Ví dụ.
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
89

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

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
90 và
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
91 bị cấm trong phạm vi lồng nhau ngầm

Kể từ Python 3. 6, trong hàm

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
92, mệnh đề
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
93 có thể được sử dụng để lặp lại một trình lặp không đồng bộ . Việc hiểu trong hàm
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
92 có thể bao gồm mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 hoặc
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
93 theo sau biểu thức đầu, có thể chứa mệnh đề bổ sung
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 hoặc
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
93 và cũng có thể sử dụng biểu thức
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
99. Nếu một cách hiểu có chứa
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
93 mệnh đề hoặc
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
99 biểu thức hoặc cách hiểu không đồng bộ khác thì nó được gọi là cách hiểu không đồng bộ. Việc hiểu không đồng bộ có thể tạm dừng việc thực thi chức năng coroutine mà nó xuất hiện. Xem thêm PEP 530.

Mới trong phiên bản 3. 6. Tính năng hiểu không đồng bộ đã được giới thiệu.

Đã thay đổi trong phiên bản 3. 8. ______290 và

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
91 bị cấm trong phạm vi lồng nhau ngầm.

Đã thay đổi trong phiên bản 3. 11. Việc hiểu không đồng bộ hiện được phép hiểu bên trong các chức năng không đồng bộ. Hiểu bên ngoài hoàn toàn trở thành không đồng bộ.

6. 2. 5. Danh sách hiển thị¶

Hiển thị danh sách là một chuỗi các biểu thức có thể trống được đặt trong dấu ngoặc vuông

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
9

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 một cách hiểu. 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 phần 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 hiển thị¶

Hiển thị tập hợp được biểu thị bằng dấu ngoặc nhọn và có thể phân biệt với hiển thị từ điển do không có dấu hai chấm ngăn cách các khóa và giá trị

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
4

Một màn hình tập hợp tạo ra một đối tượng tập hợp có thể thay đổi mới, nội dung được chỉ định bởi một chuỗi các biểu thức hoặc một cách hiểu. 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 phần 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 rỗng không thể được xây dựng với

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
44;

6. 2. 7. Từ điển hiển thị¶

Hiển thị từ điển là một chuỗi các cặp khóa/mốc có thể trống được đặt trong dấu ngoặc nhọn

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
6

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ác cặp khóa/dữ liệu được phân tách bằng dấu phẩy được cung cấp, chúng sẽ được đánh giá từ trái sang phải để xác định các mục nhập 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 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à giá trị cuối cùng được cung cấp

Dấu hoa thị kép

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
45 biểu thị việc giải nén từ điển. Toán hạng của nó phải là một ánh xạ . 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à các lần giải nén từ điển trước đó.

Mới trong phiên bản 3. 5. Giải nén thành màn hình từ điển, do PEP 448 đề xuất ban đầu.

Khả năng hiểu chính tả, trái ngược với khả năng hiểu danh sách và tập hợp, cần hai biểu thức được phân tách bằng dấu hai chấm, theo sau là các mệnh đề “for” và “if” thông thường. Khi quá trình hiểu được chạy, các thành phần khóa và giá trị kết quả được chèn vào từ điển mới theo thứ tự chúng được tạo

Các hạn chế về loại giá trị khóa được liệt kê trước đó trong phần Hệ thống phân cấp loại tiêu chuẩn . (Tóm lại, loại khóa phải là có thể băm , loại trừ tất cả các đối tượng có thể thay đổi. ) Không phát hiện xung đột giữa các phím trùng lặp; .

Đã thay đổi trong phiên bản 3. 8. Trước Python 3. 8, trong phần hiểu chính tả, 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.

6. 2. 8. Biểu thức trình tạo¶

Biểu thức trình tạo là một ký hiệu trình tạo nhỏ gọn trong ngoặc đơn

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
8

Một biểu thức trình tạo mang lại một đối tượng trình tạo mới. Cú pháp của nó giống như cú pháp để hiểu, ngoại trừ việc nó được đặt trong dấu ngoặc đơn thay vì dấu ngoặc vuông hoặc dấu ngoặc nhọn

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

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
46 được gọi cho đối tượng trình tạo (theo cách tương tự như các trình tạo thông thường). Tuy nhiên, biểu thức lặp trong mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 ngoài cùng bên trái được đánh giá ngay lập tức, do đó, một lỗi do nó tạo ra sẽ được phát ra tại điểm mà biểu thức trình tạo được xác định, thay vì tại điểm mà giá trị đầu tiên được truy xuất. Các mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 tiếp theo và bất kỳ điều kiện lọc nào trong mệnh đề
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 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ừ lần lặp ngoài cùng bên trái. Ví dụ.
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
60

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 Cuộc gọi để biết chi tiết.

Để tránh cản trở hoạt động dự kiến ​​của chính biểu thức trình tạo, các biểu thức

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
90 và
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
91 bị cấm trong trình tạo được xác định ngầm định

Nếu một biểu thức trình tạo chứa cả hai mệnh đề

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
93 hoặc biểu thức
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
99 thì nó được gọi là biểu thức trình tạo không đồng bộ. Một biểu thức trình tạo không đồng bộ trả về một đối tượng trình tạo không đồng bộ mới, là một trình lặp không đồng bộ (xem Trình lặp không đồng bộ ).

Mới trong phiên bản 3. 6. Các biểu thức trình tạo không đồng bộ đã được giới thiệu.

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

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
92 coroutine. Bắt đầu với 3. 7, bất kỳ hàm nào cũng có thể sử dụng các biểu thức trình tạo không đồng bộ.

Đã thay đổi trong phiên bản 3. 8. ______290 và

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
91 bị cấm trong phạm vi lồng nhau ngầm.

6. 2. 9. Biểu thức năng suất¶

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
1

Biểu thức năng suất được sử dụng khi xác định hàm trình tạo hoặc trình tạo không đồng bộ 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

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
92 function’s body causes that coroutine function to be an asynchronous generator function. For example:

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
10

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

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
90 không được phép như một phần của phạm vi được xác định ngầm định được sử dụng để triển khai biểu thức hiểu và trình tạo

Đã thay đổi trong phiên bản 3. 8. Các biểu thức lợi nhuận bị cấm trong các phạm vi lồng nhau ngầm được sử dụng để triển khai các biểu thức trình tạo và hiểu.

Các chức năng của bộ tạo được mô tả bên dưới, trong khi các chức năng của bộ tạo không đồng bộ được mô tả riêng trong phần Các chức năng của bộ tạo không đồng bộ .

Khi một hàm tạo được gọi, nó sẽ trả về một trình vòng lặp được gọi là trình tạo. Trình tạo đó sau đó điều khiển việc thực thi chức năng của trình tạo. Quá trình thực thi bắt đầu khi một trong các phương thức của trình tạo được gọi. Tại thời điểm đó, quá trình thực thi sẽ chuyển sang biểu thức lợi nhuận đầu tiên, ở đó biểu thức này lại bị treo, trả về giá trị của

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
80 cho trình gọi của trình tạo. Bằng cách treo, chúng tôi muốn nói rằng tất 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 biến cục bộ, con trỏ lệnh, 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 tiếp tục 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 lệnh 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 sử dụng
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
46 (thường thông qua nội dung dựng sẵn
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 hoặc
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
83) thì kết quả là
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84. Mặt khác, nếu sử dụng
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
85, thì kết quả sẽ là giá trị được truyền vào phương thức đó

Tất cả những điều này làm cho các chức năng của trình tạo khá giống với coroutines; . Sự khác biệt duy nhất là một hàm tạo không thể kiểm soát nơi thực thi sẽ tiếp tục sau khi nó mang lại kết quả;

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

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
86. Nếu trình tạo không được tiếp tục lại trước khi nó được hoàn thiện (bằng cách đạt đến số tham chiếu bằng 0 hoặc bằng cách thu gom rác), phương thức
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
87 của trình tạo-iterator sẽ được gọi, cho phép mọi mệnh đề
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
88 đang chờ xử lý thực thi

Khi sử dụng

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
89, biểu thức được cung cấp phải là biểu thức có thể lặp lại. Các giá trị được tạo bằng cách lặp lại có thể lặp lại đó được chuyển trực tiếp đến người gọi các phương thức của trình tạo hiện tại. Bất kỳ giá trị nào được truyền vào với
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
85 và bất kỳ ngoại lệ nào được truyền vào với
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
11 đều được chuyển đến trình vòng lặp cơ bản nếu nó có các phương thức phù hợp. Nếu đây không phải là trường hợp, thì
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
85 sẽ tăng
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
13 hoặc
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14, trong khi
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
11 sẽ chỉ tăng ngoại lệ được thông qua ngay lập tức

Khi trình vòng lặp cơ bản hoàn tất, thuộc tính ________ 616 của đối tượng ________ 617 được nâng lên sẽ trở thành giá trị của biểu thức năng suất. Nó có thể được đặt rõ ràng khi tăng

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17 hoặc tự động khi trình tạo phụ là trình tạo (bằng cách trả về một giá trị từ trình tạo phụ)

Đã thay đổi trong phiên bản 3. 3. Đã thêm

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
89 để ủy quyền luồng điều khiển cho một bộ phụ.

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 tay phải của câu lệnh gán

Xem thêm

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

Đề xuất thêm trình tạo và câu lệnh

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
90 vào Python

PEP 342 - Coroutines thông qua Trình tạo nâng cao

Đề xuất nâng cao API và cú pháp của trình tạo, giúp chúng có thể sử dụng được như các coroutine đơn giản

PEP 380 - Cú pháp ủy quyền cho Trình tạo con

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
101, giúp việc ủy ​​quyền cho các trình tạo con trở nên dễ dàng

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

Đề xuất mở rộng trên PEP 492 bằng cách thêm các khả năng của trình tạo vào các chức năng coroutine

6. 2. 9. 1. Phương pháp trình tạo lặp¶

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

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 đang thực thi sẽ tạo ra một ngoại lệ

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
102

trình tạo. __next__()

Bắt đầu thực hiện chức năng tạo hoặc tiếp tục nó ở biểu thức năng suất được thực hiện lần cuối. Khi chức năng tạo được tiếp tục bằng phương pháp

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
46, biểu thức năng suất hiện tại luôn ước tính thành
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84. Sau đó, việc thực thi tiếp tục đến biểu thức năng suất tiếp theo, trong đó trình tạo lại bị treo và giá trị của
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
80 được trả về cho trình gọi của
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
46. Nếu trình tạo thoát mà không mang lại giá trị khác, ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17 sẽ được đưa ra

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80 hoặc bằng hàm
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
83 tích hợp

trình tạo. gửi(giá trị)

Tiếp tục thực thi và “gửi” một giá trị vào hàm 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

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
85 trả về giá trị tiếp theo do trình tạo tạo ra hoặc tăng
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17 nếu trình tạo thoát mà không mang lại giá trị khác. Khi
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
85 được gọi để khởi động trình tạo, nó phải được gọi với đối số là
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84, vì không có biểu thức năng suất nào có thể nhận giá trị

trình tạo. ném(giá trị) ¶ . generator.ném(loại[ , value[, traceback]])

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

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17 sẽ được đưa ra. Nếu hàm tạo không bắt được ngoại lệ được truyền vào hoặc đưa ra một ngoại lệ khác, thì ngoại lệ đó sẽ lan truyền đến người gọi

Trong sử dụng thông thường, đ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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
115

Tuy nhiên, để tương thích ngược, chữ ký thứ hai được hỗ trợ, tuân theo quy ước từ các phiên bản Python cũ hơn. Đối số kiểu 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 kiểu được gọi để lấy một thể hiện. Nếu truy nguyên được cung cấp, thì nó được đặt thành ngoại lệ, nếu không, bất kỳ thuộc tính

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
116 hiện có nào được lưu trữ trong giá trị có thể bị xóa

trình tạo. đóng()

Tăng một

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
117 tại điểm chức năng tạo bị tạm dừng. Nếu chức năng tạo sau đó thoát ra một cách duyên dáng, đã bị đóng hoặc tăng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
117 (bằng cách không bắt ngoại lệ), đóng sẽ trả về trình gọi của nó. Nếu trình tạo mang lại một giá trị, một
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
119 được nâng lên. Nếu trình tạo phát sinh bất kỳ ngoại lệ nào khác, nó sẽ được truyền tới người gọi.
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
87 không làm gì nếu trình tạo đã thoát do ngoại lệ hoặc thoát bình thường

6. 2. 9. 2. Ví dụ¶

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à các hàm tạo

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
11

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

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
91, hãy xem PEP 380. Cú pháp ủy quyền cho Trình tạo con trong “Có gì mới trong Python. ”

6. 2. 9. 3. Hàm tạo không đồng bộ¶

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

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
92 xác định thêm hàm là một hàm trình tạo không đồng bộ .

Khi một hàm tạo 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à đối tượng trình tạo không đồng bộ. Đối tượng đó sau đó kiểm soát việc thực hiện chức năng tạo. Một đối tượng trình tạo không đồng bộ thường được sử dụng trong câu lệnh

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
93 trong hàm coroutine tương tự như cách một đối tượng trình tạo sẽ được sử dụng trong câu lệnh
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
80

Việc gọi một trong các phương thức của trình tạo không đồng bộ sẽ trả về một đối tượng awaitable và quá trình thực thi bắt đầu khi đối tượng này được chờ trên. Vào thời điểm đó, quá trình thực thi sẽ chuyển sang biểu thức năng suất đầu tiên, ở đó nó lại bị treo, trả về giá trị của

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
80 cho quy trình đăng ký đang chờ. Như với một trình tạo, tạm ngưng có nghĩa là tất cả trạng thái cục bộ được giữ lại, bao gồm các liên kết hiện tại của biến cục bộ, con trỏ lệnh, 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 quá trình thực thi được tiếp tục bằng cách đợi đối tượng tiếp theo được trả về bởi các phương thức của trình tạo không đồng bộ, 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 lệnh 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 sử dụng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
126 thì kết quả là
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84. Mặt khác, nếu sử dụng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
128, thì kết quả sẽ là giá trị được truyền vào phương thức đó.

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
129, tác vụ của người gọi bị hủy hoặc các trường hợp ngoại lệ khác, thì mã dọn dẹp không đồng bộ của trình tạo sẽ chạy và có thể đưa ra các ngoại lệ hoặc truy cập các biến ngữ cảnh trong một ngữ cảnh không mong muốn–có thể sau thời gian tồn tại của các tác vụ tùy thuộc vào, . Để ngăn chặn điều này, người gọi phải đóng trình tạo async một cách rõ ràng bằng cách gọi phương thức
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
130 để hoàn thiện trình tạo và cuối cùng tách nó khỏi vòng lặp sự kiện

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

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
86. Tuy nhiên, nếu trình tạo không đồng bộ không được tiếp tục lại trước khi nó được hoàn thiện (bằng cách đạt đến số tham chiếu bằng 0 hoặc bằng cách thu gom rác), thì biểu thức năng suất trong cấu trúc
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
86 có thể dẫn đến lỗi thực thi mệnh đề
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
88 đ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ộ là gọi phương thức
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
130 của trình tạo-iterator không đồng bộ và chạy đối tượng coroutine kết quả, do đó cho phép mọi mệnh đề
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
88 đang chờ xử lý thực thi

Để xử lý việc hoàn thiện khi kết thúc vòng lặp sự kiện, một vòng lặp sự kiện phải xác định hàm hoàn thiện nhận một trình tạo-iterator không đồng bộ và có lẽ gọi

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
130 và thực thi coroutine. Bộ hoàn thiện này có thể được đăng ký bằng cách gọi
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
137. Khi được lặp lại lần đầu tiên, một trình lặp-trình tạo không đồng bộ sẽ lưu trữ trình hoàn thiện đã đăng ký để được gọi khi hoàn thiện. Để biết ví dụ tham khảo về phương thức hoàn thiện, hãy xem triển khai của
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
138 trong Lib/asyncio/base_events. py

Biểu thức

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
89 là lỗi cú pháp khi được sử dụng trong hàm tạo không đồng bộ

6. 2. 9. 4. Các phương thức tạo-lặp không đồng bộ¶

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

quy trình đại lý. __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 lần cuối. Khi một chức năng tạo không đồng bộ được tiếp tục với phương pháp

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
126, biểu thức năng suất hiện tại luôn ước tính thành
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84 trong phần chờ được trả về, khi chạy sẽ tiếp tục đến biểu thức năng suất tiếp theo. Giá trị của
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
80 của biểu thức năng suất là giá trị của ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17 được đưa ra bởi quy trình hoàn thành. Nếu trình tạo không đồng bộ thoát mà không mang lại giá trị khác, thay vào đó, giá trị có thể chờ sẽ tăng ngoại lệ
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
144, báo hiệu rằng quá trình lặp không đồng bộ đã hoàn tất

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

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
93

quy trình đại lý. asend(giá trị)

Trả về một sự chờ đợi mà khi chạy sẽ tiếp tục thực hiện trình tạo không đồng bộ. Như với phương pháp

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
85 cho trình tạo, điều này "gửi" một giá trị vào hàm trình tạo không đồng bộ và đối số giá trị trở thành kết quả của biểu thức năng suất hiện tại. Sự chờ đợi được trả về bởi phương thức
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
128 sẽ trả về giá trị tiếp theo do trình tạo tạo ra dưới dạng giá trị của
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17 đã tăng hoặc tăng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
144 nếu trình tạo không đồng bộ thoát mà không mang lại giá trị khác. Khi
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
128 được gọi để khởi động trình tạo không đồng bộ, nó phải được gọi với đối số là
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84, vì không có biểu thức năng suất nào có thể nhận giá trị

quy trình đại lý. throw(loại[ , value[, traceback]])

Trả về một sự chờ đợi làm tăng ngoại lệ loại

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
152 tại điểm mà trình tạo không đồng bộ bị tạm dừng và trả về giá trị tiếp theo do hàm trình tạo tạo ra dưới dạng giá trị của ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17 đã tăng. Nếu trình tạo không đồng bộ thoát mà không mang lại giá trị khác, ngoại lệ
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
144 được đưa ra bởi lệnh chờ. Nếu hàm tạo không bắt được ngoại lệ được truyền vào hoặc đưa ra một ngoại lệ khác, thì khi lệnh có thể chờ được chạy, ngoại lệ đó sẽ lan truyền đến người gọi của lệnh có thể chờ

quy trình đại lý. đóng()

Trả về một sự chờ đợi mà khi chạy sẽ ném một

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
117 vào hàm tạo không đồng bộ tại điểm mà nó bị tạm dừng. Nếu chức năng tạo không đồng bộ sau đó thoát ra một cách duyên dáng, đã đóng hoặc tăng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
117 (bằng cách không bắt ngoại lệ), thì hàm chờ được trả về sẽ tăng ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
17. Bất kỳ sự chờ đợi nào khác được trả về bởi các cuộc gọi tiếp theo tới trình tạo không đồng bộ sẽ đưa ra một ngoại lệ
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
144. Nếu bộ tạo không đồng bộ mang lại một giá trị, một
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
119 được nâng lên bởi giá trị chờ đợi. Nếu trình tạo không đồng bộ đưa ra bất kỳ ngoại lệ nào khác, thì nó sẽ được truyền tới người gọi của lệnh chờ. Nếu trình tạo không đồng bộ đã thoát do một ngoại lệ hoặc thoát bình thường, thì các cuộc gọi tiếp theo tới
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
130 sẽ trả về một điều có thể chờ đợi mà không làm gì cả

6. 3. Gốc bầu cử¶

Bầu cử sơ bộ đại diện cho các hoạt động ràng buộc chặt chẽ nhất của ngôn ngữ. cú pháp của họ là

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
12

6. 3. 1. Tham chiếu thuộc tính¶

Tham chiếu thuộc tính là thuộc tính chính theo sau là dấu chấm và tên

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
13

Chính phải đánh giá một đối tượng thuộc loại hỗ trợ tham chiếu thuộc tính, điều mà hầu hết các đối tượng làm. Đối tượng này sau đó được yêu cầu tạo thuộc tính có tên là định danh. Quá trình sản xuất này có thể được tùy chỉnh bằng cách ghi đè phương thức

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
161. Nếu thuộc tính này không khả dụng, ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
13 sẽ được đưa ra. Mặt khác, loại và giá trị của đối tượng được tạo ra được xác định bởi đối tượng. Nhiều đánh giá của cùng một tham chiếu thuộc tính có thể mang lại các đối tượng khác nhau

6. 3. 2. Đăng ký¶

Việc đăng ký một phiên bản của lớp vùng chứa thường sẽ chọn một phần tử từ vùng chứa. Việc đăng ký một lớp chung thường sẽ trả về một đối tượng GenericAlias .

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
14

Khi một đối tượng được đăng ký, trình thông dịch sẽ đánh giá danh sách chính và biểu thức

Chính phải đánh giá đối tượng hỗ trợ đăng ký. Một đối tượng có thể hỗ trợ đăng ký thông qua việc xác định một hoặc cả hai

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
163 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
164. Khi chính được đăng ký, kết quả được đánh giá của danh sách biểu thức sẽ được chuyển đến một trong các phương thức này. Để biết thêm chi tiết về thời điểm gọi
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
165 thay vì
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
166, hãy xem __class_getitem__ so với __getitem__ .

Nếu danh sách biểu thức chứa ít nhất một dấu phẩy, nó sẽ đánh giá thành một

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
167 chứa các mục của danh sách biểu thức. Nếu không, danh sách biểu thức sẽ đánh giá giá trị của thành viên duy nhất của danh sách

Đối với các đối tượng tích hợp, có hai loại đối tượng hỗ trợ đăng ký qua

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
163

  1. Ánh xạ. Nếu chính là một ánh xạ , thì danh sách biểu thức phải đánh giá một đối tượng có giá trị là một trong các khóa của ánh xạ và đăng ký chọn giá trị . Một ví dụ về lớp ánh xạ dựng sẵn là lớp

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    169.

  2. Chuỗi. Nếu phần chính là một dãy , thì danh sách biểu thức phải đánh giá thành một

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    170 hoặc một
    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    171 (như được thảo luận trong phần sau). Ví dụ về các lớp trình tự dựng sẵn bao gồm các lớp ________ 1172, ________ 1173 và
    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    167.

Cú pháp chính thức không cung cấp đặc biệt cho các chỉ số phủ định trong các chuỗi . Tuy nhiên, tất cả các trình tự dựng sẵn đều cung cấp một phương thức

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
163 diễn giải các chỉ số phủ định bằng cách thêm độ dài của trình tự vào chỉ mục để, ví dụ:
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
176 chọn mục cuối cùng của
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
177. Giá trị kết quả phải là một số nguyên không âm nhỏ hơn số mục trong chuỗi và đăng ký chọn mục có chỉ mục là giá trị đó (đếm từ 0). Vì hỗ trợ cho các chỉ số âm và cắt xảy ra trong phương thức
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
163 của đối tượng, nên các lớp con ghi đè phương thức này sẽ cần thêm hỗ trợ đó một cách rõ ràng.

Một

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
179 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 kiểu dữ liệu riêng biệt mà là một chuỗi có đúng một ký tự

6. 3. 3. Cắt lát¶

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
180. Cú pháp cho một slice

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
15

Có sự mơ hồ trong cú pháp chính thức ở đây. bất cứ thứ gì trông giống như một danh sách biểu thức cũng giống như một danh sách lát cắt, do đó, bất kỳ đăng ký nào cũng có thể được hiểu là một lát cắt. Thay vì làm phức tạp thêm cú pháp, điều này được làm rõ bằng cách xác định rằng trong trường hợp này, diễn giải dưới dạng đăng ký được ưu tiên hơn diễn giải dưới dạng 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)

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
163 như đăng ký bình thường) với một khóa được tạo từ danh sách lát, như sau. Nếu danh sách lát chứa ít nhất một dấu phẩy, khóa là một bộ chứa chuyển đổi của các mục lát; . Việc chuyển đổi một mục lát là một biểu thức là biểu thức đó. Việc chuyển đổi một lát thích hợp là một đối tượng lát (xem phần Hệ thống phân cấp loại tiêu chuẩn ) có các thuộc tính
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
182,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
183 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
184 là giá trị của các biểu thức đã cho .

6. 3. 4. Cuộc gọi¶

Một cuộc gọi gọi một đối tượng có thể gọi được (e. g. , một hàm ) với một chuỗi đối số trống.

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
16

Dấu phẩy tùy chọn có thể xuất hiện sau các đối số vị trí và từ khóa nhưng không ảnh hưởng đến ngữ nghĩa

Đối tượng chính phải đánh giá đối tượng có thể gọi được (hàm do người dùng định nghĩa, hàm tích hợp, phương thức của đối tượng tích hợp, đối tượng lớp, phương thức của thể hiện lớp và tất cả đối tượng có phương thức

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
186 đều có thể gọi được). Tất cả các biểu thức đối số được đánh giá trước khi thực hiện cuộc gọi. Vui lòng tham khảo phần Định nghĩa hàm để biết cú pháp của danh sách tham số chính thức.

Nếu có đối số từ khóa, trước tiên chúng được chuyển đổi thành đối số vị trí, như sau. Đầu tiên, một danh sách các vị trí chưa đượ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 vị trí đầ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 mã định danh giống với tên tham số chính thức đầu tiên, thì vị trí đầu tiên được sử dụng, v.v.). Nếu vị trí đã được lấp đầy, một ngoại lệ

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14 sẽ được đưa ra. Mặt khác, đối số được đặt vào vị trí, lấp đầy nó (ngay cả khi biểu thức là
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84, nó sẽ lấp đầy vị trí). Khi tất cả các đối số đã được xử lý, các vị trí vẫn chưa được lấp đầy sẽ được lấp đầy bằng 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 sẽ được chia sẻ bởi tất cả các lệnh gọi không chỉ định giá trị đối số cho vị trí tương ứng; điều này nên . ) Nếu có bất kỳ vị trí nào chưa được lấp đầy mà không có giá trị mặc định nào được chỉ định, một ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14 sẽ được đưa ra. Mặt khác, danh sách các vị trí đã lấp đầ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 hàm tích hợp có tham số vị trí không có tên, ngay cả khi chúng được 'đặt tên' cho mục đích tài liệu và do đó không thể được cung cấp theo từ khóa. Trong CPython, đây là trường hợp đối với các hàm được triển khai trong C sử dụng

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
190 để phân tích các đối số của chúng

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

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14 sẽ được đưa ra, trừ khi có tham số chính thức sử dụng cú pháp
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
192;

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ệ

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14 sẽ được đưa ra, trừ khi có tham số chính thức sử dụng cú pháp
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
194;

Nếu cú ​​pháp

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
195 xuất hiện trong lệnh gọi hàm, thì
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
196 phải đánh giá thành một có thể lặp lại . Các phần tử từ các lần lặp này được xử lý như thể chúng là các đối số vị trí bổ sung. Đối với lời gọi
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
197, nếu y đánh giá một dãy y1, …, yM, điều này tương đương với một lời gọi với M+4 đối số vị trí x1, x2, y1, …, yM, x3, x4.

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
195 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ố
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
199 nào – xem bên dưới). Vì thế

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
17

Việc cả đối số từ khóa và cú pháp

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
195 được sử dụng trong cùng một lệnh gọi là điều bất thường, vì vậy trong thực tế, sự nhầm lẫn này không thường xảy ra

Nếu cú ​​pháp

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
199 xuất hiện trong lệnh gọi hàm, thì
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
196 phải đánh giá một ánh xạ , nội dung của ánh xạ này được coi là đối số từ khóa bổ sung. Nếu một tham số khớp với một khóa đã được cung cấp một giá trị (bởi một đối số từ khóa rõ ràng hoặc từ một giải nén khác), một ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14 sẽ được đưa ra.

Khi sử dụng

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
199, 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 để gán từ khóa có tên bằng với khóa. Khóa không nhất thiết phải là mã định danh Python (e. g.
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
605 được chấp nhận, 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 khớp với tham số chính thức, cặp khóa-giá trị được thu thập bởi tham số
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
45, nếu có hoặc nếu không có, ngoại lệ
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14 sẽ được đưa ra

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
192 hoặc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
194 không thể được sử dụng làm vùng đố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 lệnh gọi hàm chấp nhận bất kỳ số lần giải nén

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
610 và
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
45 nào, các đối số vị trí có thể tuân theo các lần giải nén lặp lại (
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
610) và các đối số từ khóa có thể tuân theo các lần giải nén từ điển (
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
45). Ban đầu được đề xuất bởi PEP 448.

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

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84, trừ khi nó đưa ra một ngoại lệ. Cách tính giá trị này tùy thuộc vào loại đối tượng có thể gọi được

Nếu nó là-

chức năng do người dùng định nghĩa

Khối mã cho hàm được thực thi, truyền cho nó danh sách đối số. Điều đầu tiên mà khối mã sẽ thực hiện là liên kết các tham số hình thức với các đối số; . Khi khối mã thực thi câu lệnh

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
615, câu lệnh này chỉ định giá trị trả về của lệnh gọi hàm. Function definitions. When the code block executes a
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
615 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ả tùy thuộc vào trình thông dịch; . Built-in Functions for the descriptions of built-in functions and methods.

một đối tượng lớp

Một phiên bản mới của lớp đó được trả về

một phương thức thể hiện của lớp

Hàm do người dùng xác định tương ứng được gọi, với danh sách đối số dài hơn danh sách đối số của lệnh gọi. ví dụ trở thành đối số đầu tiên

một thể hiện của lớp

Lớp phải định nghĩa một phương thức

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
186;

6. 4. Chờ biểu thức¶

Tạm dừng việc thực thi coroutine trên một đối tượng awaitable . Chỉ có thể được sử dụng bên trong chức năng coroutine .

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
18

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

6. 5. Người vận hành quyền lực¶

Toán tử lũy thừa liên kết chặt chẽ hơn các toán tử đơn nguyên ở bên trái của nó; . Cú pháp là

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
19

Do đó, trong một chuỗi các toán tử lũy thừa và đơn nguyên không được mở ngoặc, các toán tử đượ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). ________ 1617 kết quả là ________ 1618

Toán tử lũy thừa có ngữ nghĩa giống như hàm

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
619 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 thành sức mạnh của đối số bên phải của nó. Các đối số số trước tiên được chuyển đổi thành một loại phổ biến và kết quả là loại đó

Đối với toán hạng kiểu int, kết quả có cùng kiểu với toán hạng trừ khi đối số thứ hai là số âm; . Ví dụ,

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
620 trả về
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
621, nhưng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
622 trả về
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
623

Tăng

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
624 lên công suất âm dẫn đến một
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
625. Việc nâng một số âm lên lũy thừa phân số sẽ dẫn đến một số
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
626. (Trong các phiên bản trước, nó đã tăng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
102. )

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
628 đặc biệt

6. 6. Các phép toán số học đơn vị và bit¶

Tất cả các hoạt động số học đơn phương và bitwise có cùng mức độ ưu tiên

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
60

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
629 (trừ) đơn nguyên mang lại phủ định cho đối số số của nó;

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
631 (cộng) đơn nguyên mang lại đối số số của nó không thay đổi;

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
633 (đảo ngược) một ngôi mang lại phép nghịch đảo bit của đối số nguyên của nó. Đảo ngược bitwise của
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
177 được định nghĩa là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
635. Nó chỉ áp dụng cho các số nguyên hoặc cho các đối tượng tùy chỉnh ghi đè phương thức đặc biệt
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
636

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

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
14 sẽ được đưa ra

6. 7. Các phép toán số học nhị phân¶

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
61

Toán tử (phép nhân)

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
610 cho kết quả của các đối số của nó. Cả hai đối số phải là số hoặc một đối số phải là số nguyên và đối số kia 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 đó được nhân với nhau. Trong trường hợp thứ hai, việc lặp lại trình tự được thực hiện;

Thao tác này có thể được tùy chỉnh bằng cách sử dụng các phương pháp

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
639 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
640 đặc biệt

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
641 (at) được dùng để nhân ma trận. Không có loại Python dựng sẵn nào triển khai toán tử này

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

Các toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
642 (chia) và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
643 (chia tầng) mang lại thương số cho các đối số của chúng. Các đối số số trước tiên được chuyển đổi thành một loại phổ biến. Phép chia các số nguyên tạo ra một số float, trong khi phép chia sàn các số nguyên dẫn đến một số nguyên; . Chia cho 0 làm tăng ngoại lệ
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
625

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
645 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
646 đặc biệt

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
647 (mô-đun) mang lại phần còn lại từ phép chia đối số thứ nhất cho đối số thứ hai. Các đối số số trước tiên được chuyển đổi thành một loại phổ biến. Đối số không đúng làm tăng ngoại lệ
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
625. Các đối số có thể là số dấu phẩy động, e. g. ,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
649 bằng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
650 (vì
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
651 bằng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
652. ) Toán tử modulo luôn mang lại kết quả có cùng dấu với toán hạng thứ hai (hoặc 0);

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
653. Phân chia tầng và modulo cũng được kết nối với chức năng tích hợp sẵn
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
654.
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
655. 2

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
647 còn được nạp chồng 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à phép nội suy). Cú pháp định dạng chuỗi được mô tả trong Tham khảo thư viện Python, phần Định dạng chuỗi kiểu printf .

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
657 đặc biệt

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
654 không được xác định cho các số phức. Thay vào đó, hãy chuyển đổi thành số dấu phẩy động bằng hàm
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
659 nếu thích hợp

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
631 (bổ sung) mang lại tổng các đối số của nó. Các đối số phải 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 cộng lại với nhau. Trong trường hợp sau, các chuỗi được nối

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
661 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
662 đặc biệt

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
629 (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ố trước tiên được chuyển đổi thành một loại phổ biến

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
664 đặc biệt

6. 8. Thao tác dịch chuyển¶

Các phép toán dịch chuyển có mức độ ưu tiên thấp hơn các phép toán số học

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
62

Các toán tử này chấp nhận số nguyên làm đối số. Chúng dịch chuyển đối số thứ nhất sang trái hoặc phải theo số bit được cung cấp bởi đối số thứ hai

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
665 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
666 đặc biệt

Dịch chuyển phải theo n bit được định nghĩa là phân chia tầng cho

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
667. Dịch trái n bit được định nghĩa là phép nhân với
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
667

6. 9. Các phép toán theo bit nhị phân¶

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
63

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
669 mang lại AND theo bit 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à đối tượng tùy chỉnh ghi đè các phương thức đặc biệt của
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
670 hoặc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
671

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
672 mang lại XOR bitwise (OR độc quyền) cho các đối số của nó, phải là số nguyên hoặc một trong số chúng phải là đối tượng tùy chỉnh ghi đè các phương thức đặc biệt của
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
673 hoặc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
674

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
675 mang lại OR theo bit (bao gồm) 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à đối tượng tùy chỉnh ghi đè các phương thức đặc biệt của
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
676 hoặc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
677

6. 10. So sánh¶

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
678 có cách giải thích thông thường trong toán học

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
64

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679 hoặc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680. Các phương thức so sánh phong phú tùy chỉnh có thể trả về các giá trị không phải là boolean. Trong trường hợp này, Python sẽ gọi
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
681 trên giá trị đó trong ngữ cảnh boolean

So sánh có thể được xâu chuỗi tùy ý, e. g. ,

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
682 tương đương với
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
683, ngoại trừ việc
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
684 chỉ được đánh giá một lần (nhưng trong cả hai trường hợp,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
685 hoàn toàn không được đánh giá khi
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
686 bị ​​phát hiện là sai)

Về hình thức, nếu a, b, c, …, y, z là các biểu thức và op1, op2, …, opN là các toán tử so sánh, thì

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
687 tương đương với
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
688, ngoại trừ mỗi biểu thức được đánh giá nhiều nhất một lần

Lưu ý rằng

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
689 không ngụ ý bất kỳ loại so sánh nào giữa a và c, do đó, e. g. ,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
690 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ị¶

Các toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
691,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
692,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
693,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
694,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
695 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
696 so sánh giá trị của hai đối tượng. Các đối tượng không cần phải có cùng loại

Chương Đối tượng, giá trị và loại nêu rõ rằng đố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 chính tắc cho giá trị của đối tượng. Ngoài ra, không có yêu cầu rằng giá trị của một đối tượng phải được xây dựng theo một cách cụ thể, e. g. 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 như 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.

Bởi vì tất cả các loại đều là kiểu con (trực tiếp hoặc gián tiếp) của

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
697, nên chúng kế thừa hành vi so sánh mặc định từ
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
697. Các loại có thể tùy chỉnh hành vi so sánh của chúng bằng cách triển khai các phương pháp so sánh phong phú như
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
699, được mô tả trong Tùy chỉnh cơ bản .

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
693 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
696) 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 danh tính dẫn đến bình đẳng và so sánh bình đẳng của các trường hợp có danh tính khác nhau dẫn đến bất bình đẳng. Độ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 có tính phản xạ (i. e.
parenth_form ::=  "(" [starred_expression] ")"
02 ngụ ý
parenth_form ::=  "(" [starred_expression] ")"
03)

So sánh đơn đặt hàng mặc định (

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
691,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
692,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
695 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
694) không được cung cấp; . Độ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 bình đẳng

Hành vi so sánh đẳng thức mặc định, rằng các trường hợp có danh tính khác nhau luôn không bằng nhau, có thể trái ngược với loại nào 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 tùy chỉnh hành vi so sánh của chúng và trên thực tế, một số loại tích hợp đã làm được đ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 kiểu số tích hợp sẵn ( Kiểu số — int, float, complex ) và kiểu thư viện chuẩn

    parenth_form ::=  "(" [starred_expression] ")"
    
    09 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    10 có thể . 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 (thuật toán) mà không làm mất độ chính xác.

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

    parenth_form ::=  "(" [starred_expression] ")"
    
    11 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    12 là đặc biệt. Mọi so sánh theo thứ tự của một số với một giá trị không phải là số đều sai. Một hàm ý phản trực giác là các giá trị không phải là số không bằng chính chúng. Ví dụ: nếu
    parenth_form ::=  "(" [starred_expression] ")"
    
    13,
    parenth_form ::=  "(" [starred_expression] ")"
    
    14,
    parenth_form ::=  "(" [starred_expression] ")"
    
    15 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    16 đều sai, trong khi
    parenth_form ::=  "(" [starred_expression] ")"
    
    17 là đúng. Hành vi này phù hợp với IEEE 754

  • Enter a number  :20
    You entered:  20
    Enter a number  :29
    You entered:  29
    Enter a number  :3
    You entered:  3
    Enter a number between :Traceback (most recent call last):
       File "test.py", line 5, in 
          num = raw_input("Enter a number :")
    KeyboardInterrupt
    
    84 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    19 là những người độc thân. PEP 8 khuyên rằng việc so sánh các singletons phải luôn được thực hiện với
    parenth_form ::=  "(" [starred_expression] ")"
    
    20 hoặc
    parenth_form ::=  "(" [starred_expression] ")"
    
    21, không bao giờ là các toán tử đẳng thức

  • Các chuỗi nhị phân (ví dụ về

    parenth_form ::=  "(" [starred_expression] ")"
    
    22 hoặc
    parenth_form ::=  "(" [starred_expression] ")"
    
    23) có thể được so sánh trong và giữa các loại của chúng. Họ so sánh từ điển bằng cách sử dụng các giá trị số của các phần tử của họ

  • Các chuỗi (ví dụ về

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    172) so sánh từ điển 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 sẵn
    parenth_form ::=  "(" [starred_expression] ")"
    
    25) của các ký tự của chúng. 3

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

  • Các chuỗi (ví dụ về

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    167,
    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    173 hoặc
    parenth_form ::=  "(" [starred_expression] ")"
    
    28) chỉ có thể được so sánh trong mỗi loại của chúng, với hạn chế là các 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à so sánh thứ tự giữa các loại này làm tăng
    0 is less than 5
    1 is less than 5
    2 is less than 5
    3 is less than 5
    4 is less than 5
    5 is not less than 5
    
    14

    Các chuỗi so sánh từ điển bằng cách sử dụng so sánh các phần 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 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 bên trong của chúng

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

    • Để hai tập hợp được 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 được so sánh bằng nhau (ví dụ:

      parenth_form ::=  "(" [starred_expression] ")"
      
      30 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 sắp xếp giống như các phần tử không bằng nhau đầu tiên của chúng (ví dụ:

      parenth_form ::=  "(" [starred_expression] ")"
      
      31 có cùng giá trị với
      parenth_form ::=  "(" [starred_expression] ")"
      
      32). 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 sẽ được sắp xếp trước (ví dụ:
      parenth_form ::=  "(" [starred_expression] ")"
      
      33 là đúng)

  • Ánh xạ (ví dụ của

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    169) so sánh bằng nhau khi và chỉ khi chúng có cặp
    parenth_form ::=  "(" [starred_expression] ")"
    
    35 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 thứ tự (________ 1691, ________ 1692, ________ 1695, và

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    694) tăng ________ 614

  • Các bộ (ví dụ về

    parenth_form ::=  "(" [starred_expression] ")"
    
    41 hoặc
    parenth_form ::=  "(" [starred_expression] ")"
    
    42) có thể được so sánh trong và giữa các loại của chúng

    Họ định nghĩa các toán tử so sánh thứ tự để kiểm tra tập hợp con và tập hợp con trung bình. Các mối quan hệ đó không xác định tổng thứ tự (ví dụ: hai tập hợp

    parenth_form ::=  "(" [starred_expression] ")"
    
    43 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    44 không bằng nhau, không phải là tập hợp con của nhau, cũng không phải là tập hợp con của nhau). Theo đó, các tập hợp không phải là đối số thích hợp cho các hàm phụ thuộc vào tổng số thứ tự (ví dụ:
    parenth_form ::=  "(" [starred_expression] ")"
    
    45,
    parenth_form ::=  "(" [starred_expression] ")"
    
    46 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    47 tạo ra kết quả không xác định với danh sách các tập hợp làm đầu vào)

    So sánh các tập hợp thực thi tính phản xạ của các phần tử của nó

  • Hầu hết các loại tích hợp khác không có phương thức so sánh nào được triển khai, vì vậy chúng kế thừa hành vi so sánh mặc định

Các lớp do người dùng định nghĩa tùy chỉnh hành vi so sánh của chúng phải 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 được 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

    parenth_form ::=  "(" [starred_expression] ")"
    
    02 ngụ ý
    parenth_form ::=  "(" [starred_expression] ")"
    
    03

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

    parenth_form ::=  "(" [starred_expression] ")"
    
    03 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    51

    parenth_form ::=  "(" [starred_expression] ")"
    
    52 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    53

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    686 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    55

    parenth_form ::=  "(" [starred_expression] ")"
    
    32 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    57

  • So sánh nên chuyển tiếp. Các ví dụ (không đầy đủ) sau đây minh họa rằng

    parenth_form ::=  "(" [starred_expression] ")"
    
    58 ngụ ý
    parenth_form ::=  "(" [starred_expression] ")"
    
    59

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    683 ngụ ý
    parenth_form ::=  "(" [starred_expression] ")"
    
    61

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

    parenth_form ::=  "(" [starred_expression] ")"
    
    03 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    63

    #!/usr/bin/python
    
    count = 0
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    
    686 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    65 (đối với tổng số đơn đặt hàng)

    parenth_form ::=  "(" [starred_expression] ")"
    
    66 và
    parenth_form ::=  "(" [starred_expression] ")"
    
    67 (đối với tổng số đơn đặt hàng)

    Hai biểu thức cuối cùng áp dụng cho các tập hợp được sắp xếp hoàn toàn (e. g. đến các chuỗi, nhưng không phải cho các tập hợp hoặc ánh xạ). Xem thêm trang trí

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

  • Kết quả

    parenth_form ::=  "(" [starred_expression] ")"
    
    69 phải phù hợp với bình đẳng. Các đối tượng bằng nhau phải có cùng giá trị băm hoặc được đánh dấu là không thể băm

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 phải là 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 tư cách thành viên¶

Các nhà khai thác

parenth_form ::=  "(" [starred_expression] ")"
70 và
parenth_form ::=  "(" [starred_expression] ")"
71 kiểm tra tư cách thành viên.
parenth_form ::=  "(" [starred_expression] ")"
72 đánh giá thành
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679 nếu x là thành viên của s và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680 nếu không.
parenth_form ::=  "(" [starred_expression] ")"
75 trả về phủ định của
parenth_form ::=  "(" [starred_expression] ")"
72. Tất cả các loại trình tự và tập hợp tích hợp đều hỗ trợ điều này cũng như từ điển, trong đó
parenth_form ::=  "(" [starred_expression] ")"
70 kiểm tra xem từ điển có khóa đã cho hay không. Đối với các loại vùng chứa như danh sách, bộ dữ liệu, bộ, bộ đóng băng, dict hoặc bộ sưu tập. deque, biểu thức
parenth_form ::=  "(" [starred_expression] ")"
78 tương đương với
parenth_form ::=  "(" [starred_expression] ")"
79

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

parenth_form ::=  "(" [starred_expression] ")"
78 là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679 khi và chỉ khi x là chuỗi con của y. Một bài kiểm tra tương đương là
parenth_form ::=  "(" [starred_expression] ")"
82. Các chuỗi rỗng luôn được coi là một chuỗi con của bất kỳ chuỗi nào khác, vì vậy,
parenth_form ::=  "(" [starred_expression] ")"
83 sẽ trả về
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679

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

parenth_form ::=  "(" [starred_expression] ")"
85,
parenth_form ::=  "(" [starred_expression] ")"
78 trả về
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679 nếu
parenth_form ::=  "(" [starred_expression] ")"
88 trả về giá trị thực và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680 nếu ngược lại

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

parenth_form ::=  "(" [starred_expression] ")"
85 nhưng định nghĩa
parenth_form ::=  "(" [starred_expression] ")"
91,
parenth_form ::=  "(" [starred_expression] ")"
78 là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679 nếu một số giá trị
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
685, mà biểu thức
parenth_form ::=  "(" [starred_expression] ")"
95 là đúng, được tạo trong khi lặp lại trên
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
684. Nếu một ngoại lệ được đưa ra trong quá trình lặp lại, thì như thể
parenth_form ::=  "(" [starred_expression] ")"
70 đã đưa ra ngoại lệ đó

Cuối cùng, giao thức lặp kiểu cũ đã được thử. nếu một lớp định nghĩa

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
163,
parenth_form ::=  "(" [starred_expression] ")"
78 là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679 khi và chỉ khi có chỉ số nguyên không âm i sao cho
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
801 và không có chỉ số nguyên nào thấp hơn làm tăng ngoại lệ
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
802. (Nếu có bất kỳ ngoại lệ nào khác được đưa ra, thì như thể
parenth_form ::=  "(" [starred_expression] ")"
70 đã đưa ra ngoại lệ đó)

Toán tử

parenth_form ::=  "(" [starred_expression] ")"
71 được định nghĩa là có giá trị thực nghịch đảo của
parenth_form ::=  "(" [starred_expression] ")"
70

6. 10. 3. So sánh danh tính¶

Toán tử

parenth_form ::=  "(" [starred_expression] ")"
20 và
parenth_form ::=  "(" [starred_expression] ")"
21 kiểm tra danh tính của đối tượng.
parenth_form ::=  "(" [starred_expression] ")"
02 đúng khi và chỉ khi x và y là cùng một đối tượng. Danh tính của Đối tượng được xác định bằng hàm
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
809.
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
810 mang lại giá trị chân lý nghịch đảo. 4

6. 11. Các phép toán Boolean¶

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
65

Trong ngữ cảnh của các phép toán 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.

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680,
Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
84, số 0 của tất cả các loại, chuỗi và vùng chứa trống (bao gồm chuỗi, bộ dữ liệu, danh sách, từ điển, bộ và bộ đóng băng). 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ị thực của chúng bằng cách cung cấp phương thức
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
813

Toán tử

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
814 trả về
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679 nếu đối số của nó là sai, ngược lại là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680

Biểu thức

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
817 đánh giá x đầu tiên;

Biểu thức

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
818 đánh giá x đầu tiên;

Lưu ý rằng cả

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
819 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
820 đều không hạn chế giá trị và loại mà chúng trả về cho
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
679, mà chỉ trả về đối số được đánh giá cuối cùng. Điều này đôi khi hữu ích, e. g. , nếu
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
823 là một chuỗi nên được thay thế bằng một giá trị mặc định nếu nó trống, biểu thức
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
824 sẽ mang lại giá trị mong muốn. Bởi vì
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
814 phải tạo một giá trị mới, nó trả về một giá trị boolean bất kể loại đối số của nó (ví dụ:
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
826 tạo ra
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680 thay vì
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
828. )

6. 12. Biểu thức gán¶

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
66

Một biểu thức gán (đôi khi còn được gọi là "biểu thức được đặt tên" hoặc "hải mã") gán một

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
196 cho một
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
830, đồng thời trả về giá trị của
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
196

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
67

Hoặc, khi xử lý luồng tệp theo khối

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
68

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 thức phụ trong biểu thức cắt, điều kiện, lambda, đối số từ khóa và hiểu-nếu và trong các câu lệnh

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
832 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
833. Ở tất cả những nơi khác mà chúng có thể được sử dụng, dấu ngoặc đơn không bắt buộc, kể cả trong câu lệnh
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
82 và
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
835

Mới trong phiên bản 3. 8. Xem PEP 572 để biết thêm chi tiết về biểu thức gán.

6. 13. Biểu thức điều kiện¶

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
69

Biểu thức điều kiện (đôi khi được gọi là “toán tử bậc ba”) có mức ưu tiên thấp nhất trong tất cả các phép toán Python

Biểu thức

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
836 đầu 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ề;

Xem PEP 308 để biết thêm chi tiết về biểu thức điều kiện

6. 14. Lambdas¶

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

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
837 mang lại một đối tượng chức năng. Đối tượng chưa được đặt tên hoạt động giống như một đối tượng chức năng được xác định bằng

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

Xem phần Định nghĩa hàm để biết cú pháp của danh sách tham số. Lưu ý rằng các hàm được tạo bằng biểu thức lambda không thể chứa câu lệnh hoặc chú thích.

6. 15. Danh sách biểu thức¶

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

Ngoại trừ khi là một phần của danh sách hoặc tập hợp hiển thị, danh sách biểu thức chứa ít nhất một dấu phẩy sẽ tạo ra một bộ. Độ dài của bộ dữ liệu là số biểu thức trong danh sách. Các biểu thức được đánh giá từ trái sang phải

Dấu hoa thị

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
610 biểu thị quá trình giải nén có thể lặp lại. Toán hạng của nó phải là một có thể lặp lại . Iterable được mở rộng thành một chuỗi các mục, được bao gồm trong bộ, danh sách hoặc bộ mới, tại vị trí giải nén.

Mới trong phiên bản 3. 5. Giải nén lặp lại trong danh sách biểu thức, do PEP 448 đề xuất ban đầu.

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
839. )

6. 16. Trình tự đánh giá¶

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 bài tập, phía bên tay 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 các hậu tố của chúng

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

6. 17. Thứ tự ưu tiên của toán tử¶

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

Lưu ý rằng các phép so sánh, kiểm tra tư cách 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 xâu chuỗi từ trái sang phải như được mô tả trong phần So sánh section.

Nhà điều hành

Sự mô tả

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
840,

________ 1841, ________ 1842, ________ 1843

Biểu thức ràng buộc hoặc trong ngoặc đơn, hiển thị danh sách, hiển thị từ điển, hiển thị tập hợp

________ 1844, ________ 1845, ________ 1846, ________ 1847

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
848

chờ đợi biểu hiện

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
45

lũy thừa 5

________ 1850, ________ 1851, ________ 1852

Tích cực, tiêu cực, bitwise KHÔNG

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
610,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
641,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
642,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
643,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
647

Phép nhân, phép nhân ma trận, phép chia, chia sàn, lấy dư 6

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
631,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
629

Cộng và trừ

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
860,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
861

Ca làm việc

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
669

Bitwise AND

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
672

Bitwise XOR

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
675

Bitwise HOẶC

parenth_form ::=  "(" [starred_expression] ")"
70,
parenth_form ::=  "(" [starred_expression] ")"
71,
parenth_form ::=  "(" [starred_expression] ")"
20,
parenth_form ::=  "(" [starred_expression] ")"
21,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
691,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
695,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
692,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
694,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
696,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
693

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
875

Boolean KHÔNG

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
819

Boolean VÀ

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
820

Boolean HOẶC

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
82 –
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
879

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
880

biểu thức lambda

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
881

biểu thức gán

chú thích

1

Mặc dù

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
882 đúng về mặt toán học, nhưng đối với số float, nó có thể không đúng về mặt số do làm tròn. Ví dụ: và giả sử một nền tảng trên đó Python float là số có độ chính xác kép IEEE 754, để
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
883 có cùng dấu với
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
884, kết quả được tính toán là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
885, chính xác bằng số với
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
884. Thay vào đó, hàm
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
887 trả về kết quả có dấu khớp với dấu của đối số đầu tiên và do đó trả về
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
888 trong trường hợp này. Cách tiếp cận nào phù hợp hơn tùy thuộc vào ứng dụng

2

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
889 lớn hơn
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
890 do làm tròn số. Trong những trường hợp như vậy, Python trả về kết quả cuối cùng, để đảm bảo rằng
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
891 rất gần với
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
177

3

Tiêu chuẩn Unicode phân biệt giữa các điểm mã (e. g. U+0041) và ký tự trừu tượng (e. g. “CHỮ VỐN LATIN A”). Trong khi 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ã, ngoài ra còn có một số ký tự trừu tượng có thể được biểu diễn bằng một chuỗi gồm nhiều hơn một điểm mã. Ví dụ: ký tự trừu tượng “CHỮ VỐN LATIN C VỚI CEDILLA” có thể được biểu diễn dưới dạng một ký tự được soạn trước duy nhất tại vị trí mã U+00C7 hoặc dưới dạng một chuỗi ký tự cơ sở tại vị trí mã U+0043 (CHỮ IN HOA LATIN C),

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
893 là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
680, mặc dù cả hai chuỗi đại diện cho cùng một ký tự trừu tượng “CHỮ VỐN LATIN C VỚI CEDILLA”

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

#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
895

4

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

parenth_form ::=  "(" [starred_expression] ")"
20, chẳng hạn như những hành vi liên quan đến so sánh giữa các phương thức mẫu 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ử lũy thừa

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number between :Traceback (most recent call last):
   File "test.py", line 5, in 
      num = raw_input("Enter a number :")
KeyboardInterrupt
45 liên kết ít chặt chẽ hơn so với toán tử một ngôi số học hoặc bitwise ở bên phải của nó, nghĩa là,
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
898 là
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"
899