%s có hoạt động trong Python 3 không?

Bài viết này giải thích các tính năng mới trong Python 3. 0, so với 2. 6. Trăn 3. 0, còn được gọi là “Python 3000” hoặc “Py3K”, là bản phát hành Python không tương thích ngược có chủ ý đầu tiên. Trăn 3. 0 được phát hành vào ngày 3 tháng 12 năm 2008. Có nhiều thay đổi hơn so với bản phát hành thông thường và nhiều thay đổi khác quan trọng đối với tất cả người dùng Python. Tuy nhiên, sau khi tiêu hóa các thay đổi, bạn sẽ thấy rằng Python thực sự đã không thay đổi nhiều như vậy - nói chung, chúng tôi chủ yếu sửa những phiền toái và mụn cóc nổi tiếng, đồng thời loại bỏ rất nhiều hành trình cũ.

Bài viết này không cố gắng cung cấp thông số kỹ thuật đầy đủ của tất cả các tính năng mới mà thay vào đó cố gắng cung cấp một cái nhìn tổng quan thuận tiện. Để biết đầy đủ chi tiết, bạn nên tham khảo tài liệu về Python 3. 0 và/hoặc nhiều PEP được tham chiếu trong văn bản. Nếu bạn muốn hiểu toàn bộ triển khai và cơ sở thiết kế cho một tính năng cụ thể, PEP thường có nhiều chi tiết hơn tài liệu thông thường;

Do hạn chế về thời gian, tài liệu này không đầy đủ như lẽ ra phải có. Như thường lệ đối với bản phát hành mới, tệp

print("There are <", 2**32, "> possibilities!", sep="")
01 trong bản phân phối nguồn chứa nhiều thông tin chi tiết về từng điều nhỏ đã được thay đổi

Những trở ngại thường gặp¶

Phần này liệt kê một số thay đổi có khả năng khiến bạn gặp khó khăn nhất nếu bạn đã quen với Python 2. 5

In là một chức năng¶

Câu lệnh

print("There are <", 2**32, "> possibilities!", sep="")
02 đã được thay thế bằng hàm
print("There are <", 2**32, "> possibilities!", sep="")
03, với các đối số từ khóa để thay thế hầu hết cú pháp đặc biệt của câu lệnh
print("There are <", 2**32, "> possibilities!", sep="")
02 cũ (PEP 3105). ví dụ

Old: print "The answer is", 2*2
New: print("The answer is", 2*2)

Old: print x,           # Trailing comma suppresses newline
New: print(x, end=" ")  # Appends a space instead of a newline

Old: print              # Prints a newline
New: print()            # You must call the function!

Old: print >>sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)

Old: print (x, y)       # prints repr((x, y))
New: print((x, y))      # Not the same as print(x, y)!

Bạn cũng có thể tùy chỉnh dấu phân cách giữa các mục, e. g

print("There are <", 2**32, "> possibilities!", sep="")

sản xuất

There are <4294967296> possibilities!

Ghi chú

  • Hàm

    print("There are <", 2**32, "> possibilities!", sep="")
    
    03 không hỗ trợ tính năng “softspace” của câu lệnh
    print("There are <", 2**32, "> possibilities!", sep="")
    
    02 cũ. Ví dụ, trong Python 2. x,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    3 sẽ viết
    print("There are <", 2**32, "> possibilities!", sep="")
    
    4; . 0,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    5 viết
    print("There are <", 2**32, "> possibilities!", sep="")
    
    6

  • Ban đầu, bạn sẽ thấy mình gõ

    print("There are <", 2**32, "> possibilities!", sep="")
    
    7 cũ rất nhiều ở chế độ tương tác. Thay vào đó, đã đến lúc luyện lại các ngón tay của bạn để gõ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    8

  • Khi sử dụng công cụ chuyển đổi từ nguồn sang nguồn của

    print("There are <", 2**32, "> possibilities!", sep="")
    
    9, tất cả các câu lệnh
    print("There are <", 2**32, "> possibilities!", sep="")
    
    02 sẽ tự động được chuyển đổi thành lệnh gọi hàm
    print("There are <", 2**32, "> possibilities!", sep="")
    
    03, vì vậy điều này hầu như không phải là vấn đề đối với các dự án lớn hơn

Lượt xem và trình vòng lặp thay vì danh sách¶

Một số API nổi tiếng không còn trả lại danh sách

  • Phương pháp

    There are <4294967296> possibilities!
    
    2
    There are <4294967296> possibilities!
    
    3,
    There are <4294967296> possibilities!
    
    4 và
    There are <4294967296> possibilities!
    
    5 trả về “lượt xem” thay vì danh sách. Ví dụ, điều này không còn hoạt động.
    There are <4294967296> possibilities!
    
    6. Thay vào đó, hãy sử dụng
    There are <4294967296> possibilities!
    
    7 (điều này hoạt động trong Python 2. 5 cũng vậy và cũng hiệu quả như vậy)

  • Ngoài ra, các phương pháp

    There are <4294967296> possibilities!
    
    8,
    There are <4294967296> possibilities!
    
    9 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    80 không còn được hỗ trợ

  • Trình vòng lặp trả về

    print("There are <", 2**32, "> possibilities!", sep="")
    
    81 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    82. Nếu bạn thực sự cần một danh sách và các chuỗi đầu vào đều có độ dài bằng nhau, cách khắc phục nhanh là bọc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    81 trong
    print("There are <", 2**32, "> possibilities!", sep="")
    
    84, e. g.
    print("There are <", 2**32, "> possibilities!", sep="")
    
    85, nhưng cách khắc phục tốt hơn thường là sử dụng khả năng hiểu danh sách (đặc biệt khi mã gốc sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    86) hoặc viết lại mã để không cần danh sách nào cả. Đặc biệt khó khăn là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    81 được gọi cho các tác dụng phụ của chức năng;

    Nếu các chuỗi đầu vào không có độ dài bằng nhau,

    print("There are <", 2**32, "> possibilities!", sep="")
    
    81 sẽ dừng ở phần cuối của chuỗi ngắn nhất. Để tương thích hoàn toàn với
    print("There are <", 2**32, "> possibilities!", sep="")
    
    81 từ Python 2. x, cũng bọc các chuỗi trong
    There are <4294967296> possibilities!
    
    91, e. g.
    There are <4294967296> possibilities!
    
    92 trở thành
    There are <4294967296> possibilities!
    
    93

  • There are <4294967296> possibilities!
    
    94 bây giờ hoạt động giống như
    There are <4294967296> possibilities!
    
    95 đã từng hoạt động, ngoại trừ nó hoạt động với các giá trị có kích thước tùy ý. Cái sau không còn tồn tại

  • There are <4294967296> possibilities!
    
    96 hiện trả về một iterator

So sánh thứ tự¶

Trăn 3. 0 đã đơn giản hóa các quy tắc để so sánh thứ tự

  • Các toán tử so sánh thứ tự (

    There are <4294967296> possibilities!
    
    97,
    There are <4294967296> possibilities!
    
    98,
    There are <4294967296> possibilities!
    
    99,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    80) đưa ra một ngoại lệ TypeError khi toán hạng không có thứ tự tự nhiên có ý nghĩa. Do đó, các biểu thức như
    print("There are <", 2**32, "> possibilities!", sep="")
    
    81,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    82 hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 không còn giá trị nữa và e. g.
    print("There are <", 2**32, "> possibilities!", sep="")
    
    84 tăng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    85 thay vì trả lại
    print("There are <", 2**32, "> possibilities!", sep="")
    
    86. Một hệ quả tất yếu là việc sắp xếp một danh sách không đồng nhất không còn ý nghĩa nữa – tất cả các phần tử phải được so sánh với nhau. Lưu ý rằng điều này không áp dụng cho các toán tử
    print("There are <", 2**32, "> possibilities!", sep="")
    
    87 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    88. các đối tượng thuộc các loại không thể so sánh khác nhau luôn so sánh không bình đẳng với nhau

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    89 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    80 không còn chấp nhận đối số cmp cung cấp chức năng so sánh. Thay vào đó, hãy sử dụng đối số chính. N. B. các đối số chính và đảo ngược hiện là "chỉ từ khóa"

  • Hàm

    print("There are <", 2**32, "> possibilities!", sep="")
    
    81 nên được coi là không còn nữa và phương thức đặc biệt của
    print("There are <", 2**32, "> possibilities!", sep="")
    
    82 không còn được hỗ trợ. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 để sắp xếp,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    84 với
    print("There are <", 2**32, "> possibilities!", sep="")
    
    85 và các phép so sánh phong phú khác nếu cần. (Nếu bạn thực sự cần chức năng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    81, bạn có thể sử dụng biểu thức
    print("There are <", 2**32, "> possibilities!", sep="")
    
    87 tương đương với
    print("There are <", 2**32, "> possibilities!", sep="")
    
    88. )

Số nguyên¶

  • PEP 237. Về cơ bản,

    print("There are <", 2**32, "> possibilities!", sep="")
    
    89 được đổi tên thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    010. Nghĩa là, chỉ có một loại tích phân dựng sẵn, tên là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    010;

  • PEP 238. Một biểu thức như

    print("There are <", 2**32, "> possibilities!", sep="")
    
    013 trả về một số float. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    014 để có được hành vi cắt bớt. (Cú pháp thứ hai đã tồn tại trong nhiều năm, ít nhất là kể từ Python 2. 2. )

  • Hằng số

    print("There are <", 2**32, "> possibilities!", sep="")
    
    015 đã bị xóa vì không còn giới hạn về giá trị của số nguyên. Tuy nhiên,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    016 có thể được sử dụng như một số nguyên lớn hơn bất kỳ danh sách hoặc chỉ mục chuỗi thực tế nào. Nó phù hợp với kích thước số nguyên "tự nhiên" của triển khai và thường giống như
    print("There are <", 2**32, "> possibilities!", sep="")
    
    015 trong các bản phát hành trước trên cùng một nền tảng (giả sử có cùng tùy chọn bản dựng)

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    018 của một số nguyên dài không còn bao gồm đuôi
    print("There are <", 2**32, "> possibilities!", sep="")
    
    019 nữa, vì vậy mã loại bỏ vô điều kiện ký tự đó sẽ cắt bỏ chữ số cuối cùng thay vào đó. (Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    020 thay thế. )

  • Chữ bát phân không còn ở dạng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    021;

Văn bản Vs. Dữ liệu thay vì Unicode Vs. 8 bit¶

Mọi thứ bạn nghĩ bạn đã biết về dữ liệu nhị phân và Unicode đã thay đổi

  • Trăn 3. 0 sử dụng các khái niệm về văn bản và dữ liệu (nhị phân) thay vì chuỗi Unicode và chuỗi 8 bit. Tất cả văn bản là Unicode; . Loại dùng để chứa văn bản là

    print("There are <", 2**32, "> possibilities!", sep="")
    
    023, loại dùng để chứa dữ liệu là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024. Sự khác biệt lớn nhất với 2. x là bất kỳ nỗ lực nào để trộn văn bản và dữ liệu trong Python 3. 0 tăng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    85, trong khi nếu bạn kết hợp các chuỗi Unicode và 8 bit trong Python 2. x, nó sẽ hoạt động nếu chuỗi 8 bit chỉ chứa byte 7 bit (ASCII), nhưng bạn sẽ nhận được
    print("There are <", 2**32, "> possibilities!", sep="")
    
    026 nếu chuỗi đó chứa các giá trị không phải ASCII. Hành vi cụ thể về giá trị này đã gây ra nhiều khuôn mặt đáng buồn trong những năm qua

  • Do sự thay đổi triết lý này, hầu như tất cả các mã sử dụng Unicode, mã hóa hoặc dữ liệu nhị phân rất có thể phải thay đổi. Sự thay đổi là tốt hơn, như trong 2. x world, có rất nhiều lỗi liên quan đến việc trộn văn bản được mã hóa và không được mã hóa. Để được chuẩn bị trong Python 2. x, hãy bắt đầu sử dụng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    027 cho tất cả văn bản chưa được mã hóa và chỉ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    023 cho dữ liệu được mã hóa hoặc nhị phân. Sau đó, công cụ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    9 sẽ thực hiện hầu hết công việc cho bạn

  • Bạn không thể sử dụng chữ

    print("There are <", 2**32, "> possibilities!", sep="")
    
    030 cho văn bản Unicode nữa. Tuy nhiên, bạn phải sử dụng chữ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    031 cho dữ liệu nhị phân

  • Vì các loại

    print("There are <", 2**32, "> possibilities!", sep="")
    
    023 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 không thể trộn lẫn, bạn phải luôn chuyển đổi rõ ràng giữa chúng. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    034 để đi từ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    023 đến
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    037 để đi từ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 đến
    print("There are <", 2**32, "> possibilities!", sep="")
    
    023. Bạn cũng có thể sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    00 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    01 tương ứng

  • Giống như

    print("There are <", 2**32, "> possibilities!", sep="")
    
    023, loại
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 là bất biến. Có một loại có thể thay đổi riêng để giữ dữ liệu nhị phân được đệm,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    04. Gần như tất cả các API chấp nhận
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 cũng chấp nhận
    print("There are <", 2**32, "> possibilities!", sep="")
    
    04. API có thể thay đổi dựa trên
    print("There are <", 2**32, "> possibilities!", sep="")
    
    07

  • Tất cả các dấu gạch chéo ngược trong chuỗi ký tự thô được diễn giải theo nghĩa đen. Điều này có nghĩa là các lần thoát của

    print("There are <", 2**32, "> possibilities!", sep="")
    
    08 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    09 trong các chuỗi thô không được xử lý đặc biệt. Ví dụ:
    print("There are <", 2**32, "> possibilities!", sep="")
    
    10 là một chuỗi gồm 6 ký tự trong Python 3. 0, trong khi ở 2. 6,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    11 là ký tự “euro” duy nhất. (Tất nhiên, thay đổi này chỉ ảnh hưởng đến các chuỗi ký tự thô; ký tự euro là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    12 trong Python 3. 0. )

  • Loại trừu tượng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    13 tích hợp đã bị xóa. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    023 để thay thế. Các loại
    print("There are <", 2**32, "> possibilities!", sep="")
    
    023 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 không có đủ chức năng chung để đảm bảo một lớp cơ sở dùng chung. Công cụ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    9 (xem bên dưới) thay thế mọi lần xuất hiện của
    print("There are <", 2**32, "> possibilities!", sep="")
    
    13 bằng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    023

  • Các tệp được mở dưới dạng tệp văn bản (vẫn là chế độ mặc định cho

    print("There are <", 2**32, "> possibilities!", sep="")
    
    20) luôn sử dụng mã hóa để ánh xạ giữa các chuỗi (trong bộ nhớ) và byte (trên đĩa). Các tệp nhị phân (được mở bằng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    21 trong đối số chế độ) luôn sử dụng byte trong bộ nhớ. Điều này có nghĩa là nếu tệp được mở bằng chế độ hoặc mã hóa không chính xác, I/O có thể sẽ bị lỗi lớn thay vì tạo ra dữ liệu không chính xác một cách âm thầm. Điều đó cũng có nghĩa là ngay cả người dùng Unix cũng sẽ phải chỉ định đúng chế độ (văn bản hoặc nhị phân) khi mở tệp. Có một mã hóa mặc định phụ thuộc vào nền tảng, mà trên nền tảng Unixy có thể được đặt bằng biến môi trường
    print("There are <", 2**32, "> possibilities!", sep="")
    
    22 (và đôi khi cũng với một số biến môi trường liên quan đến ngôn ngữ cụ thể của nền tảng khác). Trong nhiều trường hợp, nhưng không phải tất cả, mặc định của hệ thống là UTF-8; . Bất kỳ ứng dụng nào đọc hoặc viết nhiều hơn văn bản ASCII thuần túy có thể có cách ghi đè mã hóa. Không còn nhu cầu sử dụng các luồng nhận biết mã hóa trong mô-đun
    print("There are <", 2**32, "> possibilities!", sep="")
    
    23

  • Các giá trị ban đầu của

    print("There are <", 2**32, "> possibilities!", sep="")
    
    24,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    25 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    26 hiện là các tệp văn bản chỉ unicode (i. e. , chúng là các thể hiện của
    print("There are <", 2**32, "> possibilities!", sep="")
    
    27). Để đọc và ghi dữ liệu byte với các luồng này, bạn cần sử dụng thuộc tính
    print("There are <", 2**32, "> possibilities!", sep="")
    
    28 của chúng

  • Tên tệp được chuyển đến và trả về từ API dưới dạng chuỗi (Unicode). Điều này có thể gây ra các sự cố dành riêng cho nền tảng vì trên một số nền tảng, tên tệp là các chuỗi byte tùy ý. (Mặt khác, trên Windows, tên tệp được lưu trữ nguyên bản dưới dạng Unicode. ) Như một giải pháp thay thế, hầu hết các API (e. g.

    print("There are <", 2**32, "> possibilities!", sep="")
    
    20 và nhiều hàm trong mô-đun
    print("There are <", 2**32, "> possibilities!", sep="")
    
    30) lấy tên tệp chấp nhận đối tượng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 cũng như chuỗi và một số API có cách yêu cầu giá trị trả về
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024. Do đó,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    33 trả về danh sách các phiên bản
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 nếu đối số là phiên bản
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    36 trả về thư mục làm việc hiện tại dưới dạng phiên bản
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024. Lưu ý rằng khi
    print("There are <", 2**32, "> possibilities!", sep="")
    
    33 trả về một danh sách các chuỗi, các tên tệp không thể giải mã chính xác sẽ bị bỏ qua thay vì tăng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    39

  • Một số API hệ thống như

    print("There are <", 2**32, "> possibilities!", sep="")
    
    40 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    41 cũng có thể gây ra sự cố khi các byte do hệ thống cung cấp không thể hiểu được bằng cách sử dụng mã hóa mặc định. Đặt biến
    print("There are <", 2**32, "> possibilities!", sep="")
    
    22 và chạy lại chương trình có lẽ là cách tốt nhất

  • PEP 3138.

    print("There are <", 2**32, "> possibilities!", sep="")
    
    018 của một chuỗi không còn thoát khỏi các ký tự không phải ASCII. Tuy nhiên, nó vẫn thoát khỏi các ký tự điều khiển và điểm mã với trạng thái không in được trong tiêu chuẩn Unicode

  • PEP 3120. Mã hóa nguồn mặc định hiện là UTF-8

  • PEP 3131. Các chữ cái không phải ASCII hiện được cho phép trong số nhận dạng. (Tuy nhiên, thư viện tiêu chuẩn vẫn chỉ ở dạng ASCII, ngoại trừ tên người đóng góp trong nhận xét. )

  • Các mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    44 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    45 đã biến mất. Thay vào đó, hãy nhập mô-đun
    print("There are <", 2**32, "> possibilities!", sep="")
    
    46 và sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    47 hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    48 cho văn bản và dữ liệu tương ứng

  • Xem thêm HƯỚNG DẪN Unicode , đã được cập nhật cho Python 3. 0.

Tổng quan về thay đổi cú pháp¶

Phần này cung cấp tổng quan ngắn gọn về mọi thay đổi cú pháp trong Python 3. 0

Cú pháp mới¶

  • PEP 3107. Đối số hàm và chú thích giá trị trả về. Điều này cung cấp một cách chuẩn hóa để chú thích các tham số của hàm và giá trị trả về. Không có ngữ nghĩa nào được đính kèm với các chú thích như vậy ngoại trừ việc chúng có thể được xem xét nội tâm khi chạy bằng thuộc tính

    print("There are <", 2**32, "> possibilities!", sep="")
    
    49. Mục đích là để khuyến khích thử nghiệm thông qua siêu dữ liệu, trình trang trí hoặc khung

  • PEP 3102. Đối số chỉ từ khóa. Các tham số được đặt tên xuất hiện sau

    print("There are <", 2**32, "> possibilities!", sep="")
    
    50 trong danh sách tham số phải được chỉ định bằng cú pháp từ khóa trong lệnh gọi. Bạn cũng có thể sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    51 trống trong danh sách tham số để cho biết rằng bạn không chấp nhận danh sách đối số có độ dài thay đổi, nhưng bạn có các đối số chỉ có từ khóa

  • Đối số từ khóa được cho phép sau danh sách các lớp cơ sở trong định nghĩa lớp. Điều này được sử dụng theo quy ước mới để chỉ định siêu dữ liệu (xem phần tiếp theo), nhưng cũng có thể được sử dụng cho các mục đích khác, miễn là siêu dữ liệu hỗ trợ nó

  • PEP 3104. tuyên bố

    print("There are <", 2**32, "> possibilities!", sep="")
    
    52. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    53, giờ đây bạn có thể gán trực tiếp cho một biến trong phạm vi bên ngoài (nhưng không toàn cầu).
    print("There are <", 2**32, "> possibilities!", sep="")
    
    52 là một từ dành riêng mới

  • PEP 3132. Giải nén Iterable mở rộng. Bây giờ bạn có thể viết những thứ như

    print("There are <", 2**32, "> possibilities!", sep="")
    
    55. Và thậm chí
    print("There are <", 2**32, "> possibilities!", sep="")
    
    56. Đối tượng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    57 luôn là một danh sách (có thể trống); . Thí dụ

    print("There are <", 2**32, "> possibilities!", sep="")
    
    8

    Điều này đặt a thành

    print("There are <", 2**32, "> possibilities!", sep="")
    
    58, b thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    59 và phần còn lại thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    60

  • hiểu từ điển.

    print("There are <", 2**32, "> possibilities!", sep="")
    
    61 có nghĩa giống như
    print("There are <", 2**32, "> possibilities!", sep="")
    
    62 nhưng linh hoạt hơn. (Đây là PEP 274 được chứng minh. . -)

  • Đặt chữ, e. g.

    print("There are <", 2**32, "> possibilities!", sep="")
    
    63. Lưu ý rằng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    64 là một từ điển rỗng; . Khả năng hiểu tập hợp cũng được hỗ trợ; . g. ,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    66 có nghĩa tương tự như
    print("There are <", 2**32, "> possibilities!", sep="")
    
    67 nhưng linh hoạt hơn

  • Chữ bát phân mới, e. g.

    print("There are <", 2**32, "> possibilities!", sep="")
    
    022 (đã có trong 2. 6). Các chữ số bát phân cũ (
    print("There are <", 2**32, "> possibilities!", sep="")
    
    021) đã biến mất

  • Chữ nhị phân mới, e. g.

    print("There are <", 2**32, "> possibilities!", sep="")
    
    70 (đã có trong 2. 6) và có một hàm tích hợp tương ứng mới,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    71

  • Các ký tự byte được giới thiệu với một

    print("There are <", 2**32, "> possibilities!", sep="")
    
    21 hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    73 hàng đầu và có một hàm tích hợp tương ứng mới,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    74

Cú pháp đã thay đổi¶

  • PEP 3109 và PEP 3134. cú pháp câu lệnh

    print("There are <", 2**32, "> possibilities!", sep="")
    
    75 mới.
    print("There are <", 2**32, "> possibilities!", sep="")
    
    76. Xem bên dưới

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    77 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    78 hiện là những từ dành riêng. (Kể từ 2. 6, thực sự. )

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    79,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    86 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    81 là những từ dành riêng. (2. 6 đã thực thi một phần các hạn chế đối với
    print("There are <", 2**32, "> possibilities!", sep="")
    
    81. )

  • Thay đổi từ

    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 exc, var thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 exc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    77 var. Xem PEP 3110

  • PEP 3115. Cú pháp siêu dữ liệu mới. Thay vì

    There are <4294967296> possibilities!
    
    9

    bây giờ bạn phải sử dụng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    8

    Biến mô-đun-toàn cầu

    print("There are <", 2**32, "> possibilities!", sep="")
    
    86 không còn được hỗ trợ. (Đó là một cái nạng để làm cho việc mặc định các lớp kiểu mới dễ dàng hơn mà không cần lấy mọi lớp từ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    87. )

  • Khả năng hiểu danh sách không còn hỗ trợ dạng cú pháp

    print("There are <", 2**32, "> possibilities!", sep="")
    
    88. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    89 để thay thế. Cũng lưu ý rằng việc hiểu danh sách có ngữ nghĩa khác nhau. chúng gần với đường cú pháp hơn đối với biểu thức trình tạo bên trong hàm tạo
    print("There are <", 2**32, "> possibilities!", sep="")
    
    84 và đặc biệt là các biến điều khiển vòng lặp không còn bị rò rỉ vào phạm vi xung quanh

  • Dấu chấm lửng (

    print("There are <", 2**32, "> possibilities!", sep="")
    
    91) có thể được sử dụng như một biểu thức nguyên tử ở bất cứ đâu. (Trước đây nó chỉ được phép ở dạng lát. ) Ngoài ra, bây giờ nó phải được đánh vần là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    91. (Trước đây nó cũng có thể được đánh vần là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    93, do ngẫu nhiên về ngữ pháp. )

Cú pháp đã loại bỏ¶

  • PEP 3113. Đã xóa tham số Tuple. Bạn không còn có thể viết

    print("There are <", 2**32, "> possibilities!", sep="")
    
    94. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    95 thay thế

  • Đã xóa backticks (thay vào đó hãy sử dụng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    018)

  • Đã xóa

    print("There are <", 2**32, "> possibilities!", sep="")
    
    97 (thay vào đó sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    88)

  • từ khóa đã xóa.

    print("There are <", 2**32, "> possibilities!", sep="")
    
    99 không còn là một từ khóa; . (Thật may là cú pháp hàm cũng được chấp nhận trong 2. x. ) Cũng lưu ý rằng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    99 không còn nhận đối số luồng nữa;

  • Các chữ số nguyên không còn hỗ trợ dấu sau

    There are <4294967296> possibilities!
    
    03 hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    019

  • Chuỗi ký tự không còn hỗ trợ một

    There are <4294967296> possibilities!
    
    05 hoặc
    There are <4294967296> possibilities!
    
    06 hàng đầu

  • Cú pháp mô-đun

    There are <4294967296> possibilities!
    
    07
    There are <4294967296> possibilities!
    
    08
    print("There are <", 2**32, "> possibilities!", sep="")
    
    51 chỉ được phép ở cấp độ mô-đun, không còn bên trong các chức năng

  • Cú pháp duy nhất được chấp nhận cho nhập khẩu tương đối là

    There are <4294967296> possibilities!
    
    10. Tất cả các biểu mẫu
    There are <4294967296> possibilities!
    
    08 không bắt đầu bằng
    There are <4294967296> possibilities!
    
    12 được hiểu là nhập khẩu tuyệt đối. (PEP 328)

  • Các lớp học cổ điển đã biến mất

Các thay đổi đã có trong Python 2. 6¶

Vì nhiều người dùng có lẽ đã chuyển thẳng từ Python 2. 5 đến Python 3. 0, phần này nhắc nhở người đọc về các tính năng mới ban đầu được thiết kế cho Python 3. 0 nhưng đã được chuyển ngược sang Python 2. 6. Các phần tương ứng trong Có gì mới trong Python 2. 6 nên được tư vấn cho các mô tả dài hơn.

  • PEP 343. Câu lệnh ‘với’ . Câu lệnh

    print("There are <", 2**32, "> possibilities!", sep="")
    
    78 hiện là một tính năng tiêu chuẩn và không còn cần phải nhập từ
    There are <4294967296> possibilities!
    
    14 nữa. Ngoài ra, hãy xem Viết trình quản lý ngữ cảnhMô-đun contextlib .

  • PEP 366. Nhập khẩu tương đối rõ ràng từ một mô-đun chính . Điều này nâng cao tính hữu ích của tùy chọn

    There are <4294967296> possibilities!
    
    15 khi mô-đun được tham chiếu nằm trong một gói.

  • PEP 370. Thư mục gói trang web cho mỗi người dùng .

  • PEP 371. Gói đa xử lý .

  • PEP 3101. Định dạng chuỗi nâng cao . Ghi chú. 2. 6 mô tả đề cập đến phương thức

    There are <4294967296> possibilities!
    
    16 cho cả chuỗi 8-bit và chuỗi Unicode. Trong 3. 0, chỉ loại
    print("There are <", 2**32, "> possibilities!", sep="")
    
    023 (chuỗi văn bản có hỗ trợ Unicode) hỗ trợ phương pháp này; . Kế hoạch cuối cùng là biến đây thành API duy nhất để định dạng chuỗi và bắt đầu ngừng sử dụng toán tử
    There are <4294967296> possibilities!
    
    19 trong Python 3. 1.

  • PEP 3105. in dưới dạng hàm . Đây hiện là một tính năng tiêu chuẩn và không còn cần phải nhập từ

    There are <4294967296> possibilities!
    
    14. Thêm chi tiết đã được đưa ra ở trên.

  • PEP 3110. Thay đổi xử lý ngoại lệ . Cú pháp

    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 exc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    77 var hiện là tiêu chuẩn và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 exc, var không còn được hỗ trợ. (Tất nhiên phần var của
    print("There are <", 2**32, "> possibilities!", sep="")
    
    77 vẫn là tùy chọn. )

  • PEP 3112. Số byte . Ký hiệu chuỗi ký tự

    print("There are <", 2**32, "> possibilities!", sep="")
    
    031 (và các biến thể của nó như
    There are <4294967296> possibilities!
    
    26,
    There are <4294967296> possibilities!
    
    27 và
    There are <4294967296> possibilities!
    
    28) hiện tạo ra một ký tự loại
    print("There are <", 2**32, "> possibilities!", sep="")
    
    024.

  • PEP 3116. Thư viện I/O mới . Mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    46 hiện là cách tiêu chuẩn để thực hiện tệp I/O. Hàm
    print("There are <", 2**32, "> possibilities!", sep="")
    
    20 tích hợp hiện là bí danh cho
    There are <4294967296> possibilities!
    
    32 và có thêm đối số từ khóa mã hóa, lỗi, dòng mới và closefd. Cũng lưu ý rằng đối số chế độ không hợp lệ hiện tăng
    There are <4294967296> possibilities!
    
    33, không phải
    There are <4294967296> possibilities!
    
    34. Đối tượng tệp nhị phân bên dưới đối tượng tệp văn bản có thể được truy cập dưới dạng
    There are <4294967296> possibilities!
    
    35 (nhưng lưu ý rằng đối tượng văn bản duy trì bộ đệm của chính nó để tăng tốc các hoạt động mã hóa và giải mã).

  • PEP 3118. Giao thức bộ đệm đã sửa đổi . Nội dung cũ

    There are <4294967296> possibilities!
    
    36 hiện đã thực sự biến mất; .

  • PEP 3119. Các lớp cơ sở trừu tượng . Mô-đun

    There are <4294967296> possibilities!
    
    38 và các ABC được xác định trong mô-đun
    There are <4294967296> possibilities!
    
    39 hiện đóng một vai trò nổi bật hơn trong ngôn ngữ và các loại bộ sưu tập tích hợp sẵn như
    There are <4294967296> possibilities!
    
    2 và
    There are <4294967296> possibilities!
    
    41 tương ứng với các ABC của
    There are <4294967296> possibilities!
    
    42 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    07.

  • PEP 3127. Cú pháp và hỗ trợ số nguyên . Như đã đề cập ở trên, ký hiệu chữ bát phân mới là ký hiệu duy nhất được hỗ trợ và các ký tự nhị phân đã được thêm vào.

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

  • PEP 3141. Phân cấp loại cho các số . Mô-đun

    There are <4294967296> possibilities!
    
    44 là một cách sử dụng mới khác của ABC, xác định “tháp số” của Python. Cũng lưu ý mô-đun
    There are <4294967296> possibilities!
    
    45 mới triển khai
    There are <4294967296> possibilities!
    
    46.

Thay đổi thư viện¶

Do hạn chế về thời gian, tài liệu này không đề cập đầy đủ những thay đổi rất lớn đối với thư viện chuẩn. PEP 3108 là tài liệu tham khảo cho những thay đổi lớn đối với thư viện. Đây là một đánh giá viên nang

  • Nhiều mô-đun cũ đã bị xóa. Một số, như

    There are <4294967296> possibilities!
    
    47 (không còn được sử dụng) và
    There are <4294967296> possibilities!
    
    48 (được thay thế bằng
    There are <4294967296> possibilities!
    
    49), đã bị PEP 4 phản đối. Những thứ khác đã bị xóa do loại bỏ hỗ trợ cho các nền tảng khác nhau như Irix, BeOS và Mac OS 9 (xem PEP 11). Một số mô-đun cũng đã được chọn để xóa trong Python 3. 0 do ít sử dụng hoặc do có sự thay thế tốt hơn. Xem PEP 3108 để biết danh sách đầy đủ

  • Gói

    There are <4294967296> possibilities!
    
    50 đã bị xóa vì sự hiện diện của nó trong thư viện tiêu chuẩn cốt lõi theo thời gian đã chứng tỏ là gánh nặng đặc biệt đối với các nhà phát triển cốt lõi do tính không ổn định của thử nghiệm và lịch phát hành của Berkeley DB. Tuy nhiên, gói vẫn hoạt động tốt, được duy trì bên ngoài tại https. //www. jcea. es/chương trình/pybsddb. htm

  • Một số mô-đun đã được đổi tên vì tên cũ của chúng không tuân theo PEP 8 hoặc vì nhiều lý do khác. Đây là danh sách

    Tên Cu

    Tên mới

    _winreg

    winreg

    Trình phân tích cú pháp cấu hình

    trình cấu hình

    copy_reg

    sao chép

    Xếp hàng

    xếp hàng

    SocketServer

    máy chủ ổ cắm

    cơ sở đánh dấu

    _markupbase

    đại diện

    reprlib

    kiểm tra. test_support

    kiểm tra. ủng hộ

  • Một mẫu phổ biến trong Python 2. x là có một phiên bản của mô-đun được triển khai bằng Python thuần túy, với phiên bản tăng tốc tùy chọn được triển khai dưới dạng tiện ích mở rộng C; . Điều này đặt gánh nặng nhập phiên bản tăng tốc và quay trở lại phiên bản Python thuần túy đối với mỗi người dùng của các mô-đun này. Trong Trăn 3. 0, các phiên bản được tăng tốc được coi là chi tiết triển khai của các phiên bản Python thuần túy. Người dùng phải luôn nhập phiên bản tiêu chuẩn, cố gắng nhập phiên bản được tăng tốc và quay lại phiên bản Python thuần túy. Cặp

    There are <4294967296> possibilities!
    
    51 /
    There are <4294967296> possibilities!
    
    52 được điều trị này. Mô-đun
    There are <4294967296> possibilities!
    
    55 nằm trong danh sách cho 3. 1. Mô-đun
    print("There are <", 2**32, "> possibilities!", sep="")
    
    44 đã được chuyển thành một lớp trong mô-đun
    print("There are <", 2**32, "> possibilities!", sep="")
    
    46

  • Một số mô-đun liên quan đã được nhóm thành các gói và thông thường tên mô-đun con đã được đơn giản hóa. Các gói mới kết quả là

    • There are <4294967296> possibilities!
      
      58 (
      There are <4294967296> possibilities!
      
      59,
      There are <4294967296> possibilities!
      
      60,
      There are <4294967296> possibilities!
      
      58,
      There are <4294967296> possibilities!
      
      62,
      There are <4294967296> possibilities!
      
      63,
      There are <4294967296> possibilities!
      
      64)

    • ________ 265 (________ 266, ________ 267)

    • There are <4294967296> possibilities!
      
      68 (
      There are <4294967296> possibilities!
      
      69,
      There are <4294967296> possibilities!
      
      70, ________ 271, ________ 272, ________ 273, ________ 274)

    • There are <4294967296> possibilities!
      
      75 (tất cả các mô-đun liên quan đến
      There are <4294967296> possibilities!
      
      76 ngoại trừ
      There are <4294967296> possibilities!
      
      77). Đối tượng mục tiêu của
      There are <4294967296> possibilities!
      
      77 không thực sự quan tâm đến
      There are <4294967296> possibilities!
      
      75. Cũng lưu ý rằng kể từ Python 2. 6, chức năng của
      There are <4294967296> possibilities!
      
      77 đã được tăng cường rất nhiều

    • ________ 281 (________ 281, ________ 283, ________ 284, ________ 285)

    • ________ 286 (________ 287, ________ 288, ________ 289)

Một số thay đổi khác đối với các mô-đun thư viện tiêu chuẩn, không được đề cập trong PEP 3108

  • Bị giết

    There are <4294967296> possibilities!
    
    90. Sử dụng lớp
    print("There are <", 2**32, "> possibilities!", sep="")
    
    65 tích hợp

  • Dọn dẹp mô-đun

    There are <4294967296> possibilities!
    
    92. đã xóa
    There are <4294967296> possibilities!
    
    93, _______ 294, ________ 295, ________ 296, ________ 297. (Lưu ý rằng
    There are <4294967296> possibilities!
    
    98, v.v. duy trì. )

  • Dọn dẹp loại

    There are <4294967296> possibilities!
    
    99. các phương thức
    print("There are <", 2**32, "> possibilities!", sep="")
    
    800 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    801 không còn nữa; . Ngoài ra, mã kiểu
    print("There are <", 2**32, "> possibilities!", sep="")
    
    804 cho mảng đã biến mất – sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    805 cho byte hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    806 cho ký tự Unicode

  • Dọn dẹp mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    807. đã xóa
    print("There are <", 2**32, "> possibilities!", sep="")
    
    808 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    809

  • Dọn dẹp mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    810.
    print("There are <", 2**32, "> possibilities!", sep="")
    
    811 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    812 đã biến mất;

  • Dọn dẹp mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    815. đã xóa API
    print("There are <", 2**32, "> possibilities!", sep="")
    
    816

  • Mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    817 đã biến mất

  • Các chức năng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    818,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    819 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    820 đã bị loại bỏ để thay thế cho mô-đun
    print("There are <", 2**32, "> possibilities!", sep="")
    
    821

  • Mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    822 đã được thay đổi để hoạt động với byte. Điểm vào chính hiện là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    823, thay vì generate_tokens

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    824 và những người bạn của nó (
    print("There are <", 2**32, "> possibilities!", sep="")
    
    825 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    826) đã ra đi. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    827, v.v. thay vì. (Lý do xóa là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    824 và bạn bè có hành vi cụ thể theo địa phương, đây là một ý tưởng tồi đối với các “hằng số” toàn cầu được đặt tên hấp dẫn như vậy. )

  • Đã đổi tên mô-đun

    print("There are <", 2**32, "> possibilities!", sep="")
    
    829 thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    830 (xóa dấu gạch dưới, thêm 's'). Biến
    print("There are <", 2**32, "> possibilities!", sep="")
    
    831 được tìm thấy trong hầu hết các không gian tên toàn cầu không thay đổi. Để sửa đổi nội trang, bạn nên sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    830, không phải
    print("There are <", 2**32, "> possibilities!", sep="")
    
    831

PEP 3101. Một cách tiếp cận mới để định dạng chuỗi¶

  • Một hệ thống mới cho các hoạt động định dạng chuỗi tích hợp thay thế toán tử định dạng chuỗi

    There are <4294967296> possibilities!
    
    19. (Tuy nhiên, toán tử
    There are <4294967296> possibilities!
    
    19 vẫn được hỗ trợ; nó sẽ không được dùng nữa trong Python 3. 1 và bị xóa khỏi ngôn ngữ sau một thời gian. ) Đọc PEP 3101 để biết thông tin đầy đủ

Thay đổi đối với ngoại lệ¶

Các API để tăng và bắt ngoại lệ đã được dọn sạch và thêm các tính năng mạnh mẽ mới

  • PEP 352. Tất cả các ngoại lệ phải được bắt nguồn (trực tiếp hoặc gián tiếp) từ

    print("There are <", 2**32, "> possibilities!", sep="")
    
    836. Đây là gốc của hệ thống phân cấp ngoại lệ. Đây không phải là đề xuất mới, nhưng yêu cầu kế thừa từ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    836 là mới. (Trăn 2. 6 vẫn cho phép các lớp cổ điển được nâng lên và không hạn chế những gì bạn có thể bắt. ) Kết quả là, các ngoại lệ chuỗi cuối cùng đã thực sự và hoàn toàn chết

  • Hầu như tất cả các trường hợp ngoại lệ thực sự nên bắt nguồn từ

    print("There are <", 2**32, "> possibilities!", sep="")
    
    838; . Thành ngữ được khuyến nghị để xử lý tất cả các trường hợp ngoại lệ ngoại trừ danh mục sau này là sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    83
    print("There are <", 2**32, "> possibilities!", sep="")
    
    838

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    844 đã bị xóa

  • Ngoại lệ không còn hoạt động như trình tự. Thay vào đó, hãy sử dụng thuộc tính

    print("There are <", 2**32, "> possibilities!", sep="")
    
    845

  • PEP 3109. Tăng ngoại lệ. Bây giờ bạn phải sử dụng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    846 thay vì
    print("There are <", 2**32, "> possibilities!", sep="")
    
    847. Ngoài ra, bạn không còn có thể chỉ định truy nguyên một cách rõ ràng nữa;

  • PEP 3110. Bắt ngoại lệ. Bây giờ bạn phải sử dụng

    print("There are <", 2**32, "> possibilities!", sep="")
    
    849 thay vì
    print("There are <", 2**32, "> possibilities!", sep="")
    
    850. Hơn nữa, biến bị xóa rõ ràng khi khối
    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 còn lại

  • PEP 3134. Chuỗi ngoại lệ. Có hai trường hợp. chuỗi ngầm và chuỗi rõ ràng. Xâu chuỗi ngầm định xảy ra khi một ngoại lệ được đưa ra trong khối xử lý

    print("There are <", 2**32, "> possibilities!", sep="")
    
    83 hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    853. Điều này thường xảy ra do lỗi trong khối xử lý; . Trong trường hợp này, ngoại lệ ban đầu (đang được xử lý) được lưu dưới dạng thuộc tính
    print("There are <", 2**32, "> possibilities!", sep="")
    
    854 của ngoại lệ phụ. Chuỗi rõ ràng được gọi với cú pháp này

    print("There are <", 2**32, "> possibilities!", sep="")
    
    8

    (trong đó Primary_Exception là bất kỳ biểu thức nào tạo ra một đối tượng ngoại lệ, có thể là một ngoại lệ đã bị bắt trước đó). Trong trường hợp này, ngoại lệ chính được lưu trữ trên thuộc tính

    print("There are <", 2**32, "> possibilities!", sep="")
    
    855 của ngoại lệ phụ. Truy nguyên được in khi một ngoại lệ chưa được xử lý xảy ra sẽ đi qua chuỗi thuộc tính
    print("There are <", 2**32, "> possibilities!", sep="")
    
    855 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    854 và in một truy nguyên riêng biệt cho từng thành phần của chuỗi, với ngoại lệ chính ở trên cùng. (Người dùng Java có thể nhận ra hành vi này. )

  • PEP 3134. Các đối tượng ngoại lệ hiện lưu trữ truy nguyên của chúng dưới dạng thuộc tính

    print("There are <", 2**32, "> possibilities!", sep="")
    
    848. Điều này có nghĩa là một đối tượng ngoại lệ hiện chứa tất cả thông tin liên quan đến một ngoại lệ và có ít lý do hơn để sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    859 (mặc dù đối tượng sau không bị xóa)

  • Một vài thông báo ngoại lệ được cải thiện khi Windows không tải được mô-đun mở rộng. Ví dụ,

    print("There are <", 2**32, "> possibilities!", sep="")
    
    860 bây giờ là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    861. Các chuỗi hiện xử lý các ngôn ngữ không phải tiếng Anh

Khác Các thay đổi khác¶

Toán tử và các phương thức đặc biệt¶

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    88 bây giờ trả về giá trị ngược lại của
    print("There are <", 2**32, "> possibilities!", sep="")
    
    87, trừ khi
    print("There are <", 2**32, "> possibilities!", sep="")
    
    87 trả về
    print("There are <", 2**32, "> possibilities!", sep="")
    
    865

  • Khái niệm “phương thức không ràng buộc” đã bị xóa khỏi ngôn ngữ. Khi tham chiếu một phương thức như một thuộc tính lớp, bây giờ bạn có một đối tượng hàm đơn giản

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    866,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    867 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    868 bị giết. Cú pháp
    print("There are <", 2**32, "> possibilities!", sep="")
    
    869 hiện được dịch thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    870 (hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    871 hoặc
    print("There are <", 2**32, "> possibilities!", sep="")
    
    872, khi được sử dụng làm mục tiêu gán hoặc xóa tương ứng)

  • PEP 3114. phương pháp

    print("There are <", 2**32, "> possibilities!", sep="")
    
    873 tiêu chuẩn đã được đổi tên thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    874

  • Các phương thức đặc biệt của

    print("There are <", 2**32, "> possibilities!", sep="")
    
    875 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    876 đã bị loại bỏ –
    print("There are <", 2**32, "> possibilities!", sep="")
    
    877 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    878 sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    879 ngay bây giờ để chuyển đổi đối số thành một số nguyên

  • Đã xóa hỗ trợ cho

    print("There are <", 2**32, "> possibilities!", sep="")
    
    880 và
    print("There are <", 2**32, "> possibilities!", sep="")
    
    881

  • Các thuộc tính hàm có tên

    print("There are <", 2**32, "> possibilities!", sep="")
    
    882 đã được đổi tên để sử dụng biểu mẫu
    print("There are <", 2**32, "> possibilities!", sep="")
    
    883, giải phóng các tên này trong không gian tên thuộc tính hàm cho các thuộc tính do người dùng xác định. Nói một cách dí dỏm,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    884,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    885,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    886,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    887,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    888,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    889,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    890 lần lượt được đổi tên thành
    print("There are <", 2**32, "> possibilities!", sep="")
    
    891,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    892,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    893,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    894,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    895,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    896,
    print("There are <", 2**32, "> possibilities!", sep="")
    
    897

  • print("There are <", 2**32, "> possibilities!", sep="")
    
    898 bây giờ là
    print("There are <", 2**32, "> possibilities!", sep="")
    
    899

Nội dung¶

  • PEP 3135. Mới

    There are <4294967296> possibilities!
    
    900. Giờ đây, bạn có thể gọi
    There are <4294967296> possibilities!
    
    900 mà không cần đối số và (giả sử đây là một phương thức thể hiện thông thường được định nghĩa bên trong câu lệnh
    There are <4294967296> possibilities!
    
    902), lớp và thể hiện phù hợp sẽ tự động được chọn. Với các đối số, hành vi của
    There are <4294967296> possibilities!
    
    900 không thay đổi

  • PEP 3111.

    There are <4294967296> possibilities!
    
    904 được đổi tên thành
    There are <4294967296> possibilities!
    
    905. Nghĩa là, hàm
    There are <4294967296> possibilities!
    
    905 mới đọc một dòng từ
    print("There are <", 2**32, "> possibilities!", sep="")
    
    24 và trả về nó với dòng mới ở cuối bị loại bỏ. Nó tăng
    There are <4294967296> possibilities!
    
    908 nếu đầu vào bị chấm dứt sớm. Để có hành vi cũ của
    There are <4294967296> possibilities!
    
    905, hãy sử dụng
    There are <4294967296> possibilities!
    
    910

  • Hàm tích hợp mới

    print("There are <", 2**32, "> possibilities!", sep="")
    
    873 đã được thêm vào để gọi phương thức
    print("There are <", 2**32, "> possibilities!", sep="")
    
    874 trên một đối tượng

  • Chiến lược làm tròn hàm và kiểu trả về của hàm

    There are <4294967296> possibilities!
    
    913 đã thay đổi. Các trường hợp nửa chừng chính xác hiện được làm tròn thành kết quả chẵn gần nhất thay vì cách xa số 0. (Ví dụ:
    There are <4294967296> possibilities!
    
    914 hiện trả về
    There are <4294967296> possibilities!
    
    915 thay vì
    There are <4294967296> possibilities!
    
    916. )
    There are <4294967296> possibilities!
    
    917 hiện ủy quyền cho
    There are <4294967296> possibilities!
    
    918 thay vì luôn trả về số float. Nó thường trả về một số nguyên khi được gọi với một đối số và một giá trị cùng loại với
    There are <4294967296> possibilities!
    
    919 khi được gọi với hai đối số

  • Đã chuyển

    There are <4294967296> possibilities!
    
    920 sang
    There are <4294967296> possibilities!
    
    921

  • Loại bỏ.

    There are <4294967296> possibilities!
    
    922. Thay vì sử dụng
    There are <4294967296> possibilities!
    
    923
    There are <4294967296> possibilities!
    
    924

  • Đã xóa

    There are <4294967296> possibilities!
    
    925. Thay vì
    There are <4294967296> possibilities!
    
    926, bạn có thể sử dụng
    There are <4294967296> possibilities!
    
    927. Chức năng
    There are <4294967296> possibilities!
    
    928 cũng biến mất

  • Đã xóa

    There are <4294967296> possibilities!
    
    929. Chức năng này không còn phục vụ mục đích khi các lớp cổ điển không còn nữa

  • Đã xóa

    There are <4294967296> possibilities!
    
    930. Thay vì sử dụng
    There are <4294967296> possibilities!
    
    931
    There are <4294967296> possibilities!
    
    932

  • Đã xóa loại

    There are <4294967296> possibilities!
    
    933. Sử dụng
    print("There are <", 2**32, "> possibilities!", sep="")
    
    20. Hiện tại có một số loại luồng khác nhau mở có thể quay lại trong mô-đun
    print("There are <", 2**32, "> possibilities!", sep="")
    
    46

  • Đã xóa

    There are <4294967296> possibilities!
    
    936. Sử dụng
    There are <4294967296> possibilities!
    
    937 nếu bạn thực sự cần nó;

  • Đã xóa

    There are <4294967296> possibilities!
    
    939. Sử dụng
    There are <4294967296> possibilities!
    
    940

  • Loại bỏ.

    There are <4294967296> possibilities!
    
    941 – thay vào đó hãy sử dụng toán tử
    There are <4294967296> possibilities!
    
    942

Thay đổi về API Build và C¶

Do hạn chế về thời gian, đây là danh sách rất không đầy đủ các thay đổi đối với API C

  • Hỗ trợ cho một số nền tảng đã bị loại bỏ, bao gồm nhưng không giới hạn ở Mac OS 9, BeOS, RISCOS, Irix và Tru64

  • PEP 3118. API bộ đệm mới

  • PEP 3121. Khởi tạo và hoàn thiện mô-đun mở rộng

  • PEP 3123. Làm cho

    There are <4294967296> possibilities!
    
    943 phù hợp với tiêu chuẩn C

  • Không còn hỗ trợ API C để thực thi bị hạn chế

  • Các API C của

    There are <4294967296> possibilities!
    
    944,
    There are <4294967296> possibilities!
    
    945,
    There are <4294967296> possibilities!
    
    946 và
    There are <4294967296> possibilities!
    
    947 đã bị xóa

  • API C mới

    There are <4294967296> possibilities!
    
    948, hoạt động giống như
    There are <4294967296> possibilities!
    
    949 nhưng sẽ không chặn khóa nhập (thay vào đó trả về lỗi)

  • Đã đổi tên vị trí và phương thức chuyển đổi cấp độ boolean.

    There are <4294967296> possibilities!
    
    950 bây giờ là
    There are <4294967296> possibilities!
    
    951

  • Đã xóa

    There are <4294967296> possibilities!
    
    952 và
    There are <4294967296> possibilities!
    
    953 khỏi API C

Màn biểu diễn¶

Kết quả ròng của 3. 0 khái quát hóa là Python 3. 0 chạy điểm chuẩn pystone chậm hơn khoảng 10% so với Python 2. 5. Rất có thể nguyên nhân lớn nhất là việc loại bỏ vỏ đặc biệt cho các số nguyên nhỏ. Có chỗ để cải thiện, nhưng nó sẽ xảy ra sau 3. 0 được phát hành

Chuyển sang Python 3. 0¶

Để chuyển Python 2 hiện có. 5 hoặc 2. 6 mã nguồn cho Python 3. 0, chiến lược tốt nhất là như sau

  1. (Điều kiện tiên quyết. ) Bắt đầu với phạm vi kiểm tra xuất sắc

  2. Chuyển sang Python 2. 6. Điều này sẽ không hoạt động nhiều hơn cổng trung bình từ Python 2. x sang Python 2. (x+1). Hãy chắc chắn rằng tất cả các bài kiểm tra của bạn vượt qua

  3. (Vẫn đang dùng 2. 6. ) Bật công tắc dòng lệnh

    There are <4294967296> possibilities!
    
    954. Điều này cho phép cảnh báo về các tính năng sẽ bị xóa (hoặc thay đổi) trong 3. 0. Chạy lại bộ thử nghiệm của bạn và sửa mã mà bạn nhận được cảnh báo cho đến khi không còn cảnh báo nào nữa và tất cả các thử nghiệm của bạn vẫn vượt qua

  4. Chạy trình dịch từ nguồn sang nguồn của

    print("There are <", 2**32, "> possibilities!", sep="")
    
    9 trên cây mã nguồn của bạn. (Xem 2to3 — Dịch mã Python 2 sang 3 tự động để biết thêm về công cụ này. ) Chạy kết quả của bản dịch dưới Python 3. 0. Khắc phục mọi sự cố còn lại theo cách thủ công, khắc phục sự cố cho đến khi tất cả các bài kiểm tra vượt qua lần nữa.

Không nên cố gắng viết mã nguồn chạy không thay đổi trong cả Python 2. 6 và 3. 0; . g. tránh các câu lệnh

print("There are <", 2**32, "> possibilities!", sep="")
02, siêu dữ liệu, v.v. Nếu bạn đang duy trì một thư viện cần hỗ trợ cả Python 2. 6 và Trăn 3. 0, cách tiếp cận tốt nhất là sửa đổi bước 3 ở trên bằng cách chỉnh sửa 2. 6 của mã nguồn và chạy lại trình dịch
print("There are <", 2**32, "> possibilities!", sep="")
9, thay vì chỉnh sửa phiên bản 3. 0 phiên bản của mã nguồn

Chuỗi %s có phải bằng Python không?

Toán tử %s cho phép bạn thêm một giá trị vào chuỗi Python . %s biểu thị rằng bạn muốn thêm một giá trị chuỗi vào một chuỗi. Toán tử % có thể được sử dụng với các cấu hình khác, chẳng hạn như %d, để định dạng các loại giá trị khác nhau.

%s %d có nghĩa là gì trong Python?

Chúng được sử dụng để định dạng chuỗi. %s đóng vai trò giữ chỗ cho một chuỗi trong khi %d đóng vai trò giữ chỗ cho một số . Các giá trị được liên kết của chúng được truyền qua một bộ sử dụng toán tử %.

Sự khác biệt giữa %D và %S trong Python là gì?

Trong Python, cả %s và %d đều là phần giữ chỗ cho một chuỗi và một số tương ứng. %s sẽ trả về chuỗi và %d sẽ trả về số , các giá trị được truyền bằng toán tử %.

%s trong Python 2 là gì?

#1 Định dạng chuỗi “Kiểu cũ” (% Toán tử) . Có sẵn các công cụ xác định định dạng khác cho phép bạn kiểm soát định dạng đầu ra. tell Python where to substitute the value of name , represented as a string. There are other format specifiers available that let you control the output format.