Chúng tôi sẽ đề cập đến một số bổ sung thú vị nhất cho Python - khớp mẫu cấu trúc, trình quản lý ngữ cảnh được đặt trong ngoặc đơn, nhập nhiều hơn và các thông báo lỗi mới và được cải thiện
Kiểm tra phiên bản video của bài viết ở đây
Kết hợp mô hình cấu trúc
Khớp mẫu cấu trúc là một tính năng đáng kinh ngạc được thêm vào Python — thực sự tuyệt vời
Hãy tưởng tượng một câu lệnh if-else trông như thế này
Logic if-else trong Python 3. 9Bạn lấy nó và bạn sửa đổi cú pháp để nó giống như thế này
Logic trường hợp khớp trong Python 3. 10Đó là tuyên bố mới của
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?1 — tuyệt vời, nhưng không có gì đặc biệt cho đến nay
Điều làm cho câu lệnh
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?1 trở nên thú vị là một thứ được gọi là khớp mẫu cấu trúc
So khớp mẫu cấu trúc cho phép chúng ta thực hiện logic trường hợp khớp tương tự, nhưng dựa trên việc liệu cấu trúc của đối tượng so sánh có khớp với một mẫu nhất định hay không
Vì vậy, chúng ta hãy định nghĩa hai từ điển, cả hai đều có cấu trúc khác nhau
Chúng tôi xác định dict_a và dict_b — cả hai đều chứa thông tin giống nhau, nhưng trong các cấu trúc từ điển khác nhauBây giờ, chúng ta có thể viết một mẫu để khớp với
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?3 như vậyMẫu của dict_a
Và một mẫu để khớp với
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?4 nữaMẫu của dict_b
Nếu chúng ta kết hợp cả hai điều này lại với nhau trong một tuyên bố về tình huống đối sánh, bên cạnh những gì thực sự là một
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?5/bắt tất cả với
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?6 — chúng ta sẽ nhận được
Khá mát mẻ phải không? . 22 điểm
Trình quản lý bối cảnh được ngoặc đơn
Một thay đổi nhỏ hơn bắt nguồn từ một thay đổi lớn hơn nhiều đã xuất hiện với Python 3. 9 — trình phân tích cú pháp dựa trên PEG mới
Trình phân tích cú pháp Python trước đó có nhiều hạn chế, điều này đã hạn chế các nhà phát triển Python trong đó họ có thể cho phép cú pháp nào
Trăn 3. Trình phân tích cú pháp dựa trên PEG của 9 đã loại bỏ các rào cản này, về lâu dài có thể dẫn đến cú pháp tinh tế hơn — ví dụ đầu tiên của chúng tôi về thay đổi này là trình quản lý ngữ cảnh được đặt trong ngoặc đơn mới
Trước Python 3. 9, chúng ta có thể viết một cái gì đó như thế này để mở hai [hoặc nhiều] luồng tệp I/O
Trước khi có trình phân tích cú pháp mới, chúng tôi chỉ có thể có hai trình quản lý ngữ cảnh nếu cả hai được giữ trên cùng một dòngDòng đầu tiên đó khá dài, thực tế là quá dài. Nhưng do hạn chế của trình phân tích cú pháp, cách duy nhất chúng tôi có thể chia dòng này thành nhiều dòng là sử dụng ký tự tiếp tục dòng
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?7Ngoài ra, chúng ta có thể sử dụng ký tự tiếp tục dòng \
Nó hoạt động, nhưng nó không phải Pythonic. Với trình phân tích cú pháp mới, giờ đây chúng tôi có thể chia dòng này thành nhiều dòng bằng cách sử dụng dấu ngoặc đơn như vậy
Với trình phân tích cú pháp mới và được hỗ trợ chính thức kể từ Python 3. 10 — giờ đây chúng ta có thể đặt dấu ngoặc đơn cho trình quản lý bối cảnh của mìnhĐó là Pythonic
Bây giờ, trước khi chúng ta tiếp tục — có một điều kỳ lạ nhỏ trong tính năng mới này. Nó không hoàn toàn mới…
Nếu chúng ta viết
Mặc dù không được 'giới thiệu' cho đến khi Python 3. 10, CPython đã chấp nhận thay đổi cú pháp mới nhờ trình phân tích cú pháp PEG mới — vì vậy chúng tôi có một tính năng mới, hoàn toàn tương thích với 3. 9Trong Python 3. 9 - nó hoạt động. Đó là bởi vì trình phân tích cú pháp mới đã kích hoạt cú pháp này, mặc dù nó không được hỗ trợ chính thức cho đến Python 3. 10
Nhập nhiều hơn
Có nhiều bản cập nhật hơn cho các tính năng gõ của Python, mà tôi đã viết chi tiết hơn ở đây nếu bạn quan tâm
Dễ dàng bổ sung thú vị nhất ở đây là bao gồm một toán tử mới hoạt động giống như logic OR cho các loại, điều mà trước đây chúng ta đã sử dụng phương thức
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?0 choPhương pháp hợp nhất cho các loại trong 3. 9
Bây giờ, chúng ta không cần phải viết
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?1, và
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?2 đã được đơn giản hóa thành
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?3 — trông gọn gàng hơn nhiềuToán tử hợp cho các loại trong 3. 10
Thông báo lỗi tốt hơn
Hãy nói với tôi rằng bạn đã không nhảy ngay vào Google ngay lần đầu tiên bạn nhìn thấy
SyntaxError: unexpected EOF while parsing
Kết quả số một trong Google khi nhập SyntaxError gợi ý rằng nhiều người trong chúng ta chắc chắn đã làm điều đó vào một thời điểm nào đó
EOF không mong muốn trong khi phân tích cú pháp — một cách nói *đơn giản và tao nhã* mà chúng tôi đã bỏ sót dấu ngoặc đơn
Đó không phải là một thông báo lỗi rõ ràng và Python chứa đầy các thông báo lỗi không lý tưởng. May mắn thay, ai đó đã nhận thấy — và nhiều thông báo trong số này đã được cải thiện đáng kể
Thiếu dấu ngoặc đơn với 3. 9 [trái] và 3. 10 [phải] — bấm vào đây để xem sổ tay chứa cả ba phép so sánh
Chuỗi không được tiết lộ với 3. 9 và 3. 10
Toán tử gán thay vì toán tử so sánh được sử dụng với 3. 9 và 3. 10
Có một vài thay đổi khác được đề cập trong danh sách thay đổi chính thức — nhưng dường như không hiển thị trong quá trình thử nghiệm, bao gồm
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?
Ở đây,
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?4 vẫn giống như trước đây, nhưng có thêm tên thuộc tính gợi ý —
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?5 được xác định là một lỗi đánh máy tiềm năng của thuộc tính
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?6
Theo cách tương tự, chúng tôi thấy sự cải thiện tương tự đối với các tin nhắn
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?7
from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?0
Có rất nhiều cập nhật khác cho các thông báo lỗi. kiểm tra tất cả chúng ở đây
Vì vậy, chúng là một số tính năng mới quan trọng được giới thiệu với Python 3. 10
Bản phát hành đầy đủ là ngày 4 tháng 10 năm 2021, trong vài tháng qua, tất cả các tính năng đã có sẵn trong một số phiên bản tiền phát hành [do đó bài viết này. ]
Nếu bạn muốn tự mình kiểm tra, 3. 10 có thể được tải xuống từ đây
Tôi hy vọng bạn thích bài viết này. Nếu bạn có bất kỳ câu hỏi nào, hãy cho tôi biết qua Twitter hoặc trong phần bình luận bên dưới. Nếu bạn muốn nhiều nội dung như thế này, tôi cũng đăng trên YouTube