Python luôn phát triển theo nhu cầu của cộng đồng và nó sẽ là ngôn ngữ được sử dụng nhiều nhất trong tương lai.
Python 3.9.0 gần như đã sẵn sàng. Bản phát hành 3.9.0rc2, là bản xem trước trước khi phát hành bản phát hành cuối cùng của Python 3.9.0 vào 05/10/2020.
Python 3.9 có gì hot?
Phiên bản Python 3.9 đến mang theo một lịch trình phát hành nhanh hơn, tăng hiệu suất, các hàm về chuỗi tiện dụng hơn, dictionary union operator và các API nội bộ nhất quán và ổn định hơn.
Bài viết này sẽ bao gồm:
-
Toán tử hợp nhất
-
Các hàm string
-
Gợi ý kiểu
-
Các hàm toán học mới
-
Trình phân tích cú pháp mới
-
Phạm vi địa chỉ IPv6
-
Module mới: Zoneinfo
-
Thay đổi ngôn ngữ khác
1. Toán tử hợp nhất / cập nhật
Đây là một trong những tính năng mới yêu thích của mình.
Trong phiên bản Python 3.9. Nếu bạn có hai dict a
và b
, bây giờ bạn có thể sử dụng các toán tử này để hợp nhất và cập nhật chúng.
Chúng ta có toán tử hợp nhất |
:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
c = a | b
print(c)
Khi chạy chương trình, kết quả ta nhận được là:
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
Và nếu bạn sử dụng toán tử cập nhật |=
, nó sẽ cập nhật dict gốc:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
a |= b
print(a)
Khi chạy chương trình in ra dict a ở trên, ta được:
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
Nếu từ dict của chúng ta chia sẻ một key chung, thì cặp key: value
trong từ dict thứ hai sẽ được sử dụng:
a = {1: 'a', 2: 'b', 3: 'c', 6: 'ABC'}
b = {4: 'd', 5: 'e', 6: 'DE'}
print(a | b)
Như ta thấy, key 6
giống nhau ở hai dict a
và b
, khi chạy chương trình, ta có kết quả:
{1: 'a', 2: 'b', 3: 'c', 6: 'DE', 4: 'd', 5: 'e'}
Ngoài ra, một hành vi thú vị khác của toán tử |=
là khả năng cập nhật dict với các cặp key: value
mới bằng cách sử dụng đối tượng có thể lặp lại - như list hoặc generator:
a = {'a': 'Một', 'b': 'Hai'}
b = ((i, i**2) for i in range(3))
a |= b
print(a)
Kết quả nhận được là:
{'a': 'Một', 'b': 'Hai', 0: 0, 1: 1, 2: 4}
Nếu chúng ta cố gắng làm tương tự với toán tử hợp nhất chuẩn |
chúng ta sẽ nhận được TypeError
vì nó sẽ chỉ cho phép hợp nhất giữa các dict.
2. Các hàm string mới
str.removeprefix(substring: string)
là một phương thức trả về một chuỗi mới với tiền tố được cắt bớt nếu str
bắt đầu bằng nó. Nếu khác nó, phương thức sẽ trả về chuỗi ban đầu.
str.removesuffix(substring: string)
là một phương thức trả về một chuỗi mới với hậu tố được cắt bớt nếu str
kết thúc bằng nó. Nếu khác nó, phương thức sẽ trả về chuỗi ban đầu.
# Loại bỏ tiền tố
"HelloWorld".removeprefix("Hello") # Kết quả: World
# Loại bỏ hậu tố
"HelloWorld".removesuffix("World") # Kết quả: Hello
Bạn cũng có thể đạt được hiệu quả tương tự nếu sử dụng string[len(prefix):]
cho tiền tố hoặc string(-len[suffix]:)
cho hậu tố.
Đây là những hoạt động rất đơn giản và do đó cũng là những chức năng rất đơn giản, nhưng nếu bạn thực hiện những thao tác này khá thường xuyên, nó sẽ giúp bạn rất nhiều đấy.
3. Gợi ý kiểu
Python là ngôn ngữ động, Python chỉ định động các kiểu dữ liệu cho một biến, có nghĩa là chúng ta không cần chỉ định kiểu dữ liệu trong code của mình.
Điều này không sao, nhưng đôi khi nó có thể gây nhầm lẫn!
Để phân bổ tĩnh các kiểu dữ liệu, Type hinting được sử dụng.
Điều này đã được giới thiệu trong Python 3.5. Kể từ 3.5, chúng ta có thể chỉ định các kiểu, nhưng nó khá cồng kềnh.
Bản cập nhật 3.9 này đã thực sự thay đổi điều đó, bây giờ bạn có thể sử dụng các kiểu tập hợp tích hợp sẵn (như list và dict) làm kiểu chung.
Trước đó, bạn phải import
các kiểu (List hoặc Dict), nhưng với 3.9 thì:
def greet_all(names: list[str]) -> None:
for name in names:
print("Hello", name)
... không cần phải làm thế nữa.
4. Các hàm toán học mới
Trong module math
, một loạt các chức năng linh tinh đã được thêm vào hoặc cải thiện.
Bắt đầu với việc cải tiến một chức năng hiện có.
import math
# Ước chung lớn nhất
math.gcd(80, 64, 152)
# 8
Trước đây, hàm gcd
tính Ước số chung lớn nhất chỉ có thể được áp dụng cho 2 số, buộc các lập trình viên phải thực hiện một số việc như sau math.gcd(80, math.gcd (64, 152))
, khi làm việc với nhiều số hơn.
Bắt đầu với Python 3.9, chúng ta có thể áp dụng nó cho bất kỳ số nào.
Bổ sung mới đầu tiên cho module math
là hàm math.lcm
:
# Bội chung nhỏ nhất
math.lcm(4, 8, 5)
# 40
math.lcm
tính toán Bội số Chung nhỏ nhất của các đối số của nó. Tương tự như với GCD, nó cho phép một biến làm đối số.
5. Trình phân tích cú pháp mới
Đây là một thay đổi ngoài tầm nhìn nhưng có tiềm năng trở thành một trong những thay đổi quan trọng nhất đối với sự phát triển của Python trong tương lai.
Trước đây, Python sử dụng LL(1).
Còn Python 3.9 sử dụng trình phân tích cú pháp mới là trình phân tích cú pháp dựa trên PEG.
PEG linh hoạt hơn LL(1) khi nói đến việc xây dựng các tính năng mới trong ngôn ngữ.
Tài liệu chính thức nói rằng tính linh hoạt này sẽ được nhìn thấy trong Python 3.10 trở lên.
Module ast
sử dụng trình phân tích cú pháp mới và tạo ra AST giống như trình phân tích cú pháp cũ.
6. Phạm vi địa chỉ IPv6
Một thay đổi khác được giới thiệu trong Python 3.9 là khả năng chỉ định phạm vi địa chỉ IPv6.
Phạm vi IPv6 được sử dụng để chỉ định phần nào của internet là địa chỉ IP tương ứng hợp lệ.
Phạm vi có thể được chỉ định ở cuối địa chỉ IP bằng cách sử dụng dấu %
Ví dụ: 3FFE:0:0:1:200:F8FF:FE75:50DF%2
- vì vậy địa chỉ IP này thuộc phạm vi 2 là địa chỉ liên kết cục bộ.
Vì vậy, trong trường hợp bạn cần xử lý địa chỉ IPv6 bằng Python, bây giờ bạn có thể làm như sau:
from ipaddress import IPv6Address
addr = IPv6Address('ff02::fa51%1')
print(addr.scope_id)
# "1" - interface-local IP address
Lưu ý: Hai địa chỉ có phạm vi khác nhau không bằng nhau khi so sánh bằng cách sử dụng các toán tử Python cơ bản.
7. Module mới: Zoneinfo
Module zoneinfo
hỗ trợ cơ sở dữ liệu múi giờ IANA
cho thư viện chuẩn. Nó thêm zoneinfo.ZoneInfo
, một khai triển datetime.tzinfo
cụ thể được hỗ trợ bởi dữ liệu múi giờ của hệ thống.
8. Các thay đổi khác
__import __()
hiện gây ra ImportError
thay vì ValueError
, thường xảy ra khi một lần import vượt qua package cao nhất của nó.
"".replace("", s, n)
bây giờ trả về s
thay vì một chuỗi trống cho tất cả n
khác 0. Bây giờ nó nhất quán với '"".replace (''", s)
.
Python nhanh hơn
Mọi bản phiên bản của Python đều được cải thiện hiệu suất so với phiên bản trước. Python 3.9 có hai cải tiến lớn giúp tăng hiệu suất mà không yêu cầu bất kỳ thay đổi nào đối với code hiện có.
Cải tiến đầu tiên liên quan đến việc sử dụng nhiều hơn giao thức vectorcall.
Điều này thực hiện nhiều cuộc gọi hàm phổ biến bằng cách giảm thiểu hoặc loại bỏ các đối tượng tạm thời.
Python chuyển sang chu kỳ phát hành hàng năm
Python 3.9 giới thiệu một số tích hợp mới bao gồm range, tuple, set, frozenset, list, dict - sử dụng vectorcall, giúp tăng tốc độ thực thi.
Cho đến thời điểm này, Python đã được phát triển và phát hành trong vòng mười tám tháng. PEP 602 đề xuất rằng nhóm phát triển Python áp dụng chu kỳ phát hành hàng năm và đề xuất đó đã được chấp nhận.
Tổng kết
Với mỗi bản phát hành mới, Python đã trở nên nhanh hơn và mạnh mẽ hơn, giúp bạn dễ dàng thao tác với các kiểu dữ liệu phổ biến hơn.
Những điểm mới trong Python 3.9 có lẽ không phải tất cả những thay đổi này đều liên quan đến công lập trình Python hàng ngày của bạn, nhưng mình nghĩ ít nhất bạn nên biết vì chúng có thể hữu ích vào một số thời điểm nào đó.
> Nếu bạn yêu thích ngôn ngữ Python và muốn học python một cách bài bản hơn thì xem ngay KHÓA HỌC PYTHON tại NIIT - ICT Hà Nội.
Tham khảo:
Ayushi Rawat
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python