Phiên bản Python 3.8 nào sẽ sử dụng

Phiên bản mới nhất của Python được phát hành. Trăn 3. 8 đã có sẵn trong các phiên bản beta từ mùa hè, nhưng vào ngày 14 tháng 10 năm 2019, phiên bản chính thức đầu tiên đã sẵn sàng. Bây giờ, tất cả chúng ta có thể bắt đầu chơi với các tính năng mới và hưởng lợi từ những cải tiến mới nhất

Python 3 làm gì. 8 mang đến bàn? . Tuy nhiên, bài viết này sẽ đi sâu hơn về một số thay đổi lớn nhất và chỉ cho bạn cách bạn có thể tận dụng lợi thế của Python 3. 8

Trong bài viết này, bạn sẽ tìm hiểu về

  • Sử dụng các biểu thức gán để đơn giản hóa một số cấu trúc mã
  • Thực thi các đối số chỉ vị trí trong các chức năng của riêng bạn
  • Chỉ định gợi ý loại chính xác hơn
  • Sử dụng chuỗi f để gỡ lỗi đơn giản hơn

Với một vài ngoại lệ, Python 3. 8 chứa nhiều cải tiến nhỏ so với các phiên bản trước. Đến cuối bài viết, bạn sẽ thấy nhiều thay đổi ít được chú ý hơn này, cũng như phần thảo luận về một số tối ưu hóa tạo nên Python 3. 8 nhanh hơn so với người tiền nhiệm của nó. Cuối cùng, bạn sẽ nhận được một số lời khuyên về việc nâng cấp lên phiên bản mới

Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn

Hải mã trong phòng. biểu thức chuyển nhượng

Thay đổi lớn nhất trong Python 3. 8 là phần giới thiệu biểu thức gán. Chúng được viết bằng một ký hiệu mới (

>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
1). Toán tử này thường được gọi là toán tử hải mã vì nó giống với mắt và ngà của một con hải mã ở bên cạnh

Biểu thức gán cho phép bạn gán và trả về một giá trị trong cùng một biểu thức. Ví dụ: nếu bạn muốn gán cho một biến và in giá trị của nó, thì bạn thường làm như thế này

>>>

>>> walrus = False
>>> print(walrus)
False

Trong Python 3. 8, bạn được phép kết hợp hai câu lệnh này thành một, sử dụng toán tử hải mã

>>>

>>> print(walrus := True)
True

Biểu thức gán cho phép bạn gán

>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
2 cho
>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
3 và ngay lập tức in ra giá trị. Nhưng hãy nhớ rằng toán tử hải mã không làm bất cứ điều gì không thể nếu không có nó. Nó chỉ làm cho một số cấu trúc thuận tiện hơn và đôi khi có thể truyền đạt mục đích mã của bạn rõ ràng hơn

Một mẫu thể hiện một số điểm mạnh của toán tử hải mã là các vòng lặp

>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
4 nơi bạn cần khởi tạo và cập nhật một biến. Ví dụ: đoạn mã sau yêu cầu người dùng nhập dữ liệu cho đến khi họ nhập
>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
5

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")

Mã này ít hơn lý tưởng. Bạn đang lặp lại câu lệnh

>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
6 và bằng cách nào đó bạn cần thêm
>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
7 vào danh sách trước khi yêu cầu người dùng cung cấp. Một giải pháp tốt hơn là thiết lập một vòng lặp
>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
4 vô hạn và sử dụng
>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
9 để dừng vòng lặp

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)

Mã này tương đương với mã ở trên, nhưng tránh lặp lại và bằng cách nào đó giữ cho các dòng theo thứ tự hợp lý hơn. Nếu bạn sử dụng biểu thức gán, bạn có thể đơn giản hóa vòng lặp này hơn nữa

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)

Thao tác này sẽ di chuyển bài kiểm tra trở lại dòng

>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
4, nơi cần. Tuy nhiên, hiện tại có một số điều đang xảy ra ở dòng đó, vì vậy cần phải nỗ lực hơn một chút để đọc chính xác. Sử dụng phán đoán tốt nhất của bạn về thời điểm toán tử hải mã giúp làm cho mã của bạn dễ đọc hơn

PEP 572 mô tả tất cả các chi tiết của biểu thức gán, bao gồm một số lý do căn bản để đưa chúng vào ngôn ngữ, cũng như cách sử dụng toán tử hải mã

Loại bỏ các quảng cáo

Đối số chỉ vị trí

Chức năng tích hợp sẵn

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
1 có thể được sử dụng để chuyển đổi chuỗi văn bản và số thành đối tượng
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
2. Xem xét ví dụ sau

>>>

>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]

Nhìn kỹ vào chữ ký của

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
1. Lưu ý dấu gạch chéo (
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
4) sau tham số. Nó có nghĩa là gì?

Ghi chú. Để thảo luận sâu hơn về ký hiệu

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
4, hãy xem PEP 457 - Ký hiệu cho các tham số chỉ dành cho vị trí

Hóa ra là trong khi một tham số của

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
1 được gọi là
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
7, bạn không được phép sử dụng tên của nó

>>>

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments

Khi sử dụng

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
1, bạn chỉ được phép chỉ định đối số theo vị trí, không phải theo từ khóa. Trước Python 3. 8, các đối số chỉ vị trí như vậy chỉ có thể thực hiện được đối với các hàm tích hợp. Không có cách nào dễ dàng để xác định rằng các đối số chỉ được đặt theo vị trí trong các hàm của riêng bạn

>>>

>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8

Có thể lập các đối số chỉ theo vị trí bằng cách sử dụng

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
9, nhưng cách này kém linh hoạt hơn, khó đọc hơn và buộc bạn phải triển khai phân tích cú pháp đối số của riêng mình. Trong Trăn 3. 8, bạn có thể sử dụng
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
4 để biểu thị rằng tất cả các đối số trước nó phải được chỉ định theo vị trí. Bạn có thể viết lại
>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
1 để chỉ chấp nhận đối số vị trí

>>>

>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'

Bằng cách thêm

>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
4 sau
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
7, bạn xác định rằng
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
7 chỉ là đối số chỉ vị trí. Bạn có thể kết hợp các đối số thông thường với các đối số chỉ có vị trí bằng cách đặt các đối số thông thường sau dấu gạch chéo

>>>

>>> def greet(name, /, greeting="Hello"):
..     return f"{greeting}, {name}"
.. 
>>> greet("Łukasz")
'Hello, Łukasz'

>>> greet("Łukasz", greeting="Awesome job")
'Awesome job, Łukasz'

>>> greet(name="Łukasz", greeting="Awesome job")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: greet() got some positional-only arguments passed as
           keyword arguments: 'name'

Trong

>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
5, dấu gạch chéo được đặt giữa
>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
6 và
>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
7. Điều này có nghĩa là
>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
6 là đối số chỉ theo vị trí, trong khi
>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
7 là đối số thông thường có thể được chuyển theo vị trí hoặc theo từ khóa

Thoạt nhìn, các đối số chỉ vị trí có vẻ hơi hạn chế và trái ngược với câu thần chú của Python về tầm quan trọng của khả năng đọc. Bạn có thể sẽ thấy rằng không có nhiều trường hợp các đối số chỉ vị trí cải thiện mã của bạn

Tuy nhiên, trong những trường hợp thích hợp, các đối số chỉ vị trí có thể giúp bạn linh hoạt hơn khi thiết kế các hàm. Đầu tiên, các đối số chỉ theo vị trí có ý nghĩa khi bạn có các đối số có thứ tự tự nhiên nhưng khó đặt tên mô tả hay cho các đối số đó.

Một lợi ích khác có thể có của việc sử dụng các đối số chỉ vị trí là bạn có thể dễ dàng cấu trúc lại các hàm của mình hơn. Đặc biệt, bạn có thể thay đổi tên các tham số của mình mà không lo các mã khác phụ thuộc vào các tên đó

Các đối số chỉ vị trí bổ sung độc đáo cho các đối số chỉ từ khóa. Trong bất kỳ phiên bản nào của Python 3, bạn có thể chỉ định các đối số chỉ có từ khóa bằng cách sử dụng dấu sao (

>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
0). Bất kỳ đối số nào sau
>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
0 phải được chỉ định bằng từ khóa

>>>

>>> print(walrus := True)
True
0

>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
2 là đối số chỉ có từ khóa, vì vậy Python sẽ báo lỗi nếu bạn cố chỉ định nó dựa trên vị trí mà không có từ khóa

Bạn có thể kết hợp các đối số chỉ vị trí, thông thường và chỉ từ khóa bằng cách chỉ định chúng theo thứ tự này được phân tách bằng ____15_______4 và ____29_______0. Trong ví dụ sau,

>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
5 là đối số chỉ vị trí,
>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
6 là đối số thông thường có giá trị mặc định và
>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
7 là đối số chỉ từ khóa có giá trị mặc định

>>>

>>> print(walrus := True)
True
1

>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
5 chỉ thuộc về vị trí nên bạn không thể sử dụng từ khóa
>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
5

>>>

>>> print(walrus := True)
True
2

Mặt khác,

>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
6 có thể được chỉ định cả khi có và không có từ khóa

>>>

>>> print(walrus := True)
True
3

Cuối cùng,

>>> def incr(x, /):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: incr() got some positional-only arguments passed as
           keyword arguments: 'x'
7 phải được chỉ định bằng cách sử dụng từ khóa

>>>

>>> print(walrus := True)
True
4

Bạn có thể đọc thêm về các đối số chỉ vị trí trong PEP 570

Loại bỏ các quảng cáo

Các loại chính xác hơn

Hệ thống gõ của Python đã khá trưởng thành vào thời điểm này. Tuy nhiên, trong Python 3. 8, một số tính năng mới đã được thêm vào

>>> def greet(name, /, greeting="Hello"):
..     return f"{greeting}, {name}"
.. 
>>> greet("Łukasz")
'Hello, Łukasz'

>>> greet("Łukasz", greeting="Awesome job")
'Awesome job, Łukasz'

>>> greet(name="Łukasz", greeting="Awesome job")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: greet() got some positional-only arguments passed as
           keyword arguments: 'name'
2 để cho phép gõ chính xác hơn

  • các loại chữ
  • từ điển đánh máy
  • đối tượng cuối cùng
  • giao thức

Python hỗ trợ các gợi ý loại tùy chọn, thường là chú thích trên mã của bạn

>>> print(walrus := True)
True
5

Trong ví dụ này, bạn nói rằng

>>> def greet(name, /, greeting="Hello"):
..     return f"{greeting}, {name}"
.. 
>>> greet("Łukasz")
'Hello, Łukasz'

>>> greet("Łukasz", greeting="Awesome job")
'Awesome job, Łukasz'

>>> greet(name="Łukasz", greeting="Awesome job")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: greet() got some positional-only arguments passed as
           keyword arguments: 'name'
3 phải là một
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
2 và hàm
>>> def greet(name, /, greeting="Hello"):
..     return f"{greeting}, {name}"
.. 
>>> greet("Łukasz")
'Hello, Łukasz'

>>> greet("Łukasz", greeting="Awesome job")
'Awesome job, Łukasz'

>>> greet(name="Łukasz", greeting="Awesome job")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: greet() got some positional-only arguments passed as
           keyword arguments: 'name'
5 cũng phải trả về một giá trị là
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
2. Tuy nhiên, Python coi những chú thích này là gợi ý. Chúng không được thi hành trong thời gian chạy

>>>

>>> print(walrus := True)
True
6

>>> def greet(name, /, greeting="Hello"):
..     return f"{greeting}, {name}"
.. 
>>> greet("Łukasz")
'Hello, Łukasz'

>>> greet("Łukasz", greeting="Awesome job")
'Awesome job, Łukasz'

>>> greet(name="Łukasz", greeting="Awesome job")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: greet() got some positional-only arguments passed as
           keyword arguments: 'name'
5 vui vẻ chấp nhận
>>> def greet(name, /, greeting="Hello"):
..     return f"{greeting}, {name}"
.. 
>>> greet("Łukasz")
'Hello, Łukasz'

>>> greet("Łukasz", greeting="Awesome job")
'Awesome job, Łukasz'

>>> greet(name="Łukasz", greeting="Awesome job")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: greet() got some positional-only arguments passed as
           keyword arguments: 'name'
8 như một lý lẽ, mặc dù đó không phải là
>>> float(x="3.8")
Traceback (most recent call last):
  File "", line 1, in 
TypeError: float() takes no keyword arguments
2. Có, nhưng đó không phải là trường hợp sử dụng chính cho hệ thống kiểu của Python

Thay vào đó, gợi ý nhập cho phép thực hiện kiểm tra kiểu mã Python của bạn mà không thực sự chạy tập lệnh của bạn. Điều này gợi nhớ đến việc trình biên dịch bắt lỗi kiểu trong các ngôn ngữ khác như Java, Rust và Crystal. Ngoài ra, gợi ý nhập đóng vai trò là tài liệu về mã của bạn, giúp dễ đọc hơn cũng như

Ghi chú. Có sẵn một số trình kiểm tra kiểu tĩnh, bao gồm Pyright, Pytype và Pyre. Trong bài viết này, bạn sẽ sử dụng Mypy. Bạn có thể cài đặt Mypy từ PyPI bằng cách sử dụng

>>> print(walrus := True)
True
00

>>> print(walrus := True)
True
7

Theo một nghĩa nào đó, Mypy là triển khai tham chiếu của trình kiểm tra kiểu cho Python và đang được phát triển tại Dropbox dưới sự lãnh đạo của Jukka Lehtasalo. Người tạo ra Python, Guido van Rossum, là thành viên của nhóm Mypy

Bạn có thể tìm thêm thông tin về gợi ý kiểu trong Python trong PEP 484 gốc, cũng như trong Kiểm tra kiểu Python (Hướng dẫn)

Có bốn PEP mới về kiểm tra kiểu đã được chấp nhận và đưa vào Python 3. 8. Bạn sẽ thấy các ví dụ ngắn từ mỗi ví dụ này

PEP 586 giới thiệu loại.

>>> print(walrus := True)
True
01 hơi đặc biệt ở chỗ nó đại diện cho một hoặc một số giá trị cụ thể. Một trường hợp sử dụng của
>>> print(walrus := True)
True
01 là có thể thêm chính xác các loại, khi các đối số chuỗi được sử dụng để mô tả hành vi cụ thể. Xem xét ví dụ sau

>>> print(walrus := True)
True
8

Chương trình sẽ vượt qua trình kiểm tra kiểu tĩnh, mặc dù ____________04 là hướng không hợp lệ. Trình kiểm tra loại chỉ kiểm tra xem

>>> print(walrus := True)
True
04 có phải là một chuỗi không. Trong trường hợp này, sẽ chính xác hơn khi nói rằng
>>> print(walrus := True)
True
06 phải là chuỗi ký tự
>>> print(walrus := True)
True
07 hoặc chuỗi ký tự
>>> print(walrus := True)
True
08. Sử dụng
>>> print(walrus := True)
True
01, bạn có thể làm chính xác điều đó

>>> print(walrus := True)
True
9

Bằng cách hiển thị các giá trị được phép của

>>> print(walrus := True)
True
06 cho trình kiểm tra loại, giờ đây bạn có thể được cảnh báo về lỗi

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
0

Cú pháp cơ bản là

>>> print(walrus := True)
True
11. Chẳng hạn,
>>> print(walrus := True)
True
12 đại diện cho giá trị bằng chữ 38. Bạn có thể diễn đạt một trong vài giá trị bằng chữ bằng cách sử dụng
>>> print(walrus := True)
True
13

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
1

Vì đây là trường hợp sử dụng khá phổ biến nên bạn có thể (và có lẽ nên) sử dụng ký hiệu đơn giản hơn là

>>> print(walrus := True)
True
14 để thay thế. Bạn đã sử dụng cái sau khi thêm các loại vào
>>> print(walrus := True)
True
15. Nếu bạn xem kỹ đầu ra từ Mypy ở trên, bạn có thể thấy rằng nó đã dịch ký hiệu đơn giản hơn sang ký hiệu
>>> print(walrus := True)
True
13 trong nội bộ

Có những trường hợp loại giá trị trả về của hàm phụ thuộc vào đối số đầu vào. Một ví dụ là

>>> print(walrus := True)
True
17 có thể trả về một chuỗi văn bản hoặc một mảng byte tùy thuộc vào giá trị của
>>> print(walrus := True)
True
18. Điều này có thể được xử lý thông qua

Ví dụ sau đây cho thấy khung của một máy tính có thể trả về câu trả lời dưới dạng số thông thường (

>>> print(walrus := True)
True
19) hoặc dưới dạng chữ số La Mã (
>>> print(walrus := True)
True
20)

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
2

Mã có gợi ý loại chính xác. kết quả của

>>> print(walrus := True)
True
21 sẽ là
>>> print(walrus := True)
True
22 hoặc
>>> print(walrus := True)
True
23. Tuy nhiên, thường thì mã này sẽ được gọi với một ký tự
>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
2 hoặc
>>> print(walrus := True)
True
25 như giá trị của
>>> print(walrus := True)
True
26, trong trường hợp đó, bạn muốn trình kiểm tra loại suy luận chính xác liệu
>>> print(walrus := True)
True
22 hay
>>> print(walrus := True)
True
23 được trả về. Điều này có thể được thực hiện bằng cách sử dụng
>>> print(walrus := True)
True
01 cùng với
>>> print(walrus := True)
True
30

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
3

Các chữ ký

>>> print(walrus := True)
True
30 được thêm vào sẽ giúp người kiểm tra loại của bạn suy ra
>>> print(walrus := True)
True
22 hoặc
>>> print(walrus := True)
True
23 tùy thuộc vào giá trị bằng chữ của
>>> print(walrus := True)
True
26. Lưu ý rằng các dấu chấm lửng (_______2_______35) là một phần theo nghĩa đen của mã. Chúng đại diện cho thân hàm trong các chữ ký quá tải

Để bổ sung cho

>>> print(walrus := True)
True
01, PEP 591 giới thiệu. Vòng loại này chỉ định rằng một biến hoặc thuộc tính không được gán lại, xác định lại hoặc ghi đè. Sau đây là một lỗi đánh máy

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
4

Mypy sẽ đánh dấu dòng

>>> print(walrus := True)
True
38 và lưu ý rằng bạn
>>> print(walrus := True)
True
39. Điều này cung cấp cho bạn một cách để đảm bảo rằng các hằng số trong mã của bạn không bao giờ thay đổi giá trị của chúng

Ngoài ra, còn có một trình trang trí có thể được áp dụng cho các lớp và phương thức. Các lớp được trang trí bằng

>>> print(walrus := True)
True
40 không thể được phân lớp, trong khi các phương thức
>>> print(walrus := True)
True
40 không thể bị ghi đè bởi các lớp con

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
5

Mypy sẽ gắn cờ ví dụ này với thông báo lỗi

>>> print(walrus := True)
True
43. Để tìm hiểu thêm về
>>> print(walrus := True)
True
37 và
>>> print(walrus := True)
True
40, hãy xem PEP 591

PEP thứ ba cho phép gợi ý loại cụ thể hơn là PEP 589, giới thiệu. Điều này có thể được sử dụng để chỉ định các loại cho khóa và giá trị trong từ điển bằng cách sử dụng ký hiệu tương tự như đã nhập

Theo truyền thống, từ điển đã được chú thích bằng cách sử dụng. Vấn đề là điều này chỉ cho phép một loại cho các khóa và một loại cho các giá trị, thường dẫn đến các chú thích như

>>> print(walrus := True)
True
49. Ví dụ, hãy xem xét một từ điển đăng ký thông tin về các phiên bản Python

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
6

Giá trị tương ứng với

>>> print(walrus := True)
True
50 là một chuỗi, trong khi
>>> print(walrus := True)
True
51 là một số nguyên. Điều này không thể được biểu diễn chính xác bằng cách sử dụng
>>> print(walrus := True)
True
48. Với
>>> print(walrus := True)
True
46 mới, bạn có thể làm như sau

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
7

Trình kiểm tra loại sau đó sẽ có thể suy ra rằng

>>> print(walrus := True)
True
54 có loại
>>> print(walrus := True)
True
22, trong khi
>>> print(walrus := True)
True
56 là một
>>> print(walrus := True)
True
23. Trong thời gian chạy, một
>>> print(walrus := True)
True
46 là một
>>> print(walrus := True)
True
59 thông thường và các gợi ý loại được bỏ qua như bình thường. Bạn cũng có thể sử dụng hoàn toàn
>>> print(walrus := True)
True
46 như một chú thích

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
8

Mypy sẽ cho bạn biết nếu bất kỳ giá trị nào của bạn có loại sai hoặc nếu bạn sử dụng khóa chưa được khai báo. Xem PEP 589 để biết thêm ví dụ

Mypy đã hỗ trợ được một thời gian rồi. Tuy nhiên, việc nghiệm thu chính thức chỉ diễn ra vào tháng 5/2019

Các giao thức là một cách để chính thức hóa sự hỗ trợ của Python đối với việc gõ vịt

Khi tôi nhìn thấy một con chim đi như vịt, bơi như vịt và kêu quạc quạc như vịt, tôi gọi con chim đó là vịt. ()

Kiểu gõ vịt cho phép bạn, ví dụ, đọc

>>> print(walrus := True)
True
61 trên bất kỳ đối tượng nào có thuộc tính
>>> print(walrus := True)
True
61 mà không thực sự quan tâm đến loại đối tượng. Có vẻ như phản trực giác đối với hệ thống đánh máy để hỗ trợ điều này. Thông qua phân loại cấu trúc, vẫn có thể hiểu được cách gõ vịt

Ví dụ, bạn có thể xác định một giao thức có tên là

>>> print(walrus := True)
True
63 có thể xác định tất cả các đối tượng bằng thuộc tính
>>> print(walrus := True)
True
61

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
9

Ở đây,

>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
5 lấy bất kỳ đối tượng nào, miễn là nó xác định thuộc tính
>>> print(walrus := True)
True
61. Xem PEP 544 và tài liệu Mypy để biết thêm thông tin về các giao thức

Loại bỏ các quảng cáo

Gỡ lỗi đơn giản hơn với chuỗi f

chuỗi f đã được giới thiệu trong Python 3. 6, và đã trở nên rất phổ biến. Chúng có thể là lý do phổ biến nhất khiến các thư viện Python chỉ được hỗ trợ trên phiên bản 3. 6 trở lên. Chuỗi f là một chuỗi ký tự được định dạng. Bạn có thể nhận ra nó bằng cách dẫn đầu

>>> print(walrus := True)
True
67

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
0

Khi bạn sử dụng chuỗi f, bạn có thể đặt các biến và thậm chí cả các biểu thức bên trong dấu ngoặc nhọn. Sau đó, chúng sẽ được đánh giá trong thời gian chạy và được đưa vào chuỗi. Bạn có thể có nhiều biểu thức trong một f-string

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
1

Trong biểu thức cuối cùng,

>>> print(walrus := True)
True
68, bạn cũng sử dụng một công cụ xác định định dạng. Các định dạng định dạng được phân tách khỏi các biểu thức bằng dấu hai chấm

>>> print(walrus := True)
True
69 có nghĩa là khu vực được định dạng dưới dạng số dấu phẩy động với 2 chữ số thập phân. Các chỉ định định dạng giống như đối với. Xem danh sách đầy đủ các công cụ xác định định dạng được phép

Trong Python 3. 8, bạn có thể sử dụng các biểu thức gán bên trong chuỗi f. Chỉ cần đảm bảo bao quanh biểu thức gán bằng dấu ngoặc đơn

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
2

Tuy nhiên, tin tức thực sự trong Python 3. 8 là trình xác định gỡ lỗi mới. Bây giờ bạn có thể thêm

>>> print(walrus := True)
True
71 vào cuối biểu thức và nó sẽ in cả biểu thức và giá trị của nó

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
3

Đây là cách viết tắt, thường sẽ hữu ích nhất khi làm việc tương tác hoặc thêm các câu lệnh in để gỡ lỗi tập lệnh của bạn. Trong các phiên bản trước của Python, bạn cần đánh vần biến hoặc biểu thức hai lần để nhận được cùng một thông tin

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
4

Bạn có thể thêm khoảng trắng xung quanh

>>> print(walrus := True)
True
71 và sử dụng các công cụ xác định định dạng như bình thường

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
5

Trình xác định định dạng

>>> print(walrus := True)
True
73 cho biết rằng _____
>>> def incr(x):
..     return x + 1
.. 
>>> incr(3.8)
4.8

>>> incr(x=3.8)
4.8
6 phải được căn phải trong chuỗi 10 ký tự.
>>> print(walrus := True)
True
71 cũng hoạt động với các biểu thức phức tạp hơn

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
6

Để biết thêm thông tin về chuỗi f, hãy xem Chuỗi f của Python 3. Cú pháp định dạng chuỗi được cải tiến (Hướng dẫn)

Hội đồng chỉ đạo Python

Về mặt kỹ thuật, quản trị của Python không phải là một tính năng ngôn ngữ. Tuy nhiên, Trăn 3. 8 là phiên bản đầu tiên của Python không được phát triển dưới chế độ độc tài nhân từ của Guido van Rossum. Ngôn ngữ Python hiện được quản lý bởi một hội đồng chỉ đạo bao gồm năm nhà phát triển cốt lõi

  • Barry Warszawa
  • Brett pháo
  • Carol sẵn sàng
  • Hướng dẫn van Rossum
  • Nick Coghlan

Con đường dẫn đến mô hình quản trị mới cho Python là một nghiên cứu thú vị về tự tổ chức. Guido van Rossum đã tạo ra Python vào đầu những năm 1990 và được mệnh danh một cách trìu mến là Nhà độc tài nhân từ cho cuộc sống của Python (BDFL). Qua nhiều năm, ngày càng có nhiều quyết định về ngôn ngữ Python được đưa ra thông qua các Đề xuất cải tiến Python (PEP). Tuy nhiên, Guido đã chính thức đưa ra quyết định cuối cùng về bất kỳ tính năng ngôn ngữ mới nào

Sau một cuộc thảo luận dài và sôi nổi về , Guido đã thông báo vào tháng 7 năm 2018 rằng anh ấy sẽ nghỉ hưu với vai trò là BDFL (lần này là thực tế). Ông cố tình không đặt tên cho một người kế vị. Thay vào đó, anh ấy yêu cầu nhóm các nhà phát triển cốt lõi tìm ra cách quản lý Python trong tương lai

May mắn thay, quy trình PEP đã được thiết lập tốt nên việc sử dụng PEP để thảo luận và quyết định mô hình quản trị mới là điều đương nhiên. Cho đến mùa thu năm 2018, một số mô hình đã được đề xuất, bao gồm bầu chọn một BDFL mới (được đổi tên thành Cán bộ ra quyết định có ảnh hưởng trọng tài trọng tài. GUIDO), hoặc chuyển sang mô hình cộng đồng dựa trên sự đồng thuận và bỏ phiếu, không có sự lãnh đạo tập trung. Vào tháng 12 năm 2018, mô hình hội đồng chỉ đạo đã được chọn sau khi bỏ phiếu giữa các nhà phát triển cốt lõi

Phiên bản Python 3.8 nào sẽ sử dụng
Hội đồng chỉ đạo Python tại PyCon 2019. Từ trái sang phải. Barry Warsaw, Brett Cannon, Carol Willing, Guido van Rossum và Nick Coghlan (Hình ảnh. Geir Arne Hjelle)

Hội đồng chỉ đạo bao gồm năm thành viên của cộng đồng Python, như được liệt kê ở trên. Sẽ có một cuộc bầu cử cho một hội đồng chỉ đạo mới sau mỗi lần phát hành Python chính. Nói cách khác, sẽ có một cuộc bầu cử sau khi phát hành Python 3. 8

Mặc dù đây là một cuộc bầu cử mở, nhưng người ta cho rằng hầu hết, nếu không muốn nói là tất cả, của hội đồng chỉ đạo mới thành lập sẽ được bầu lại. Hội đồng chỉ đạo phải đưa ra quyết định về ngôn ngữ Python, nhưng nên cố gắng sử dụng những quyền hạn đó càng ít càng tốt

Bạn có thể đọc tất cả thông tin về mô hình quản trị mới trong PEP 13, trong khi quy trình quyết định mô hình mới được mô tả trong PEP 8000. Để biết thêm thông tin, hãy xem Bài phát biểu quan trọng của PyCon 2019 và nghe Brett Cannon trên Talk Python To Me và trên podcast The Changelog. Bạn có thể theo dõi cập nhật từ hội đồng chỉ đạo trên GitHub

Loại bỏ các quảng cáo

Các tính năng khá thú vị khác

Cho đến nay, bạn đã xem tin tức tiêu đề về tính năng mới trong Python 3. 8. Tuy nhiên, có nhiều thay đổi khác cũng khá hay ho. Trong phần này, bạn sẽ xem nhanh một số trong số chúng

>>> print(walrus := True) True 76

Có một mô-đun mới có sẵn trong thư viện chuẩn trong Python 3. 8.

>>> print(walrus := True)
True
76. Thông qua mô-đun này, bạn có thể truy cập thông tin về các gói đã cài đặt trong bản cài đặt Python của mình. Cùng với mô-đun đồng hành của nó, ,
>>> print(walrus := True)
True
76 cải thiện chức năng của phiên bản cũ hơn
>>> print(walrus := True)
True
80

Ví dụ, bạn có thể lấy một số thông tin về

>>> print(walrus := True)
True
00

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
7

Phiên bản hiện được cài đặt của

>>> print(walrus := True)
True
00 là 19. 2. 3.
>>> print(walrus := True)
True
83 cấp quyền truy cập vào hầu hết thông tin mà bạn có thể xem trên PyPI. Ví dụ, bạn có thể thấy rằng phiên bản
>>> print(walrus := True)
True
00 này yêu cầu Python 2. 7 hoặc Python 3. 5 hoặc cao hơn. Với
>>> print(walrus := True)
True
85, bạn nhận được danh sách tất cả các tệp tạo nên gói
>>> print(walrus := True)
True
00. Trong trường hợp này, có gần 700 tệp

>>> print(walrus := True)
True
85 trả về một danh sách các đối tượng
>>> print(walrus := True)
True
88. Những thứ này cung cấp cho bạn một cách thuận tiện để xem mã nguồn của một gói, sử dụng
>>> print(walrus := True)
True
89. Ví dụ sau in ra
>>> print(walrus := True)
True
90 từ gói
>>> print(walrus := True)
True
91

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
8

Bạn cũng có thể truy cập các gói phụ thuộc

>>>

inputs = list()
while True:
    current = input("Write something: ")
    if current == "quit":
        break
    inputs.append(current)
9

>>> print(walrus := True)
True
92 liệt kê các phụ thuộc của một gói. Ví dụ, bạn có thể thấy rằng
>>> print(walrus := True)
True
91 sử dụng
>>> print(walrus := True)
True
94 trong nền để đọc và phân tích nguồn cấp dữ liệu của các bài báo

Có một backport của

>>> print(walrus := True)
True
76 có sẵn trên PyPI hoạt động trên các phiên bản Python cũ hơn. Bạn có thể cài đặt nó bằng cách sử dụng
>>> print(walrus := True)
True
00

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
0

Bạn có thể quay lại sử dụng cổng sau PyPI trong mã của mình như sau

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
1

Xem tài liệu để biết thêm thông tin về

>>> print(walrus := True)
True
76

Chức năng >>> print(walrus := True) True 98 và >>> print(walrus := True) True 99 mới và được cải tiến

Trăn 3. 8 mang đến nhiều cải tiến cho các gói và mô-đun thư viện tiêu chuẩn hiện có.

>>> print(walrus := True)
True
98 trong thư viện chuẩn có một vài chức năng mới.
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
01 hoạt động tương tự như
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
02 tích hợp sẵn, nhưng dành cho các tích nhân

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
2

Hai tuyên bố là tương đương.

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
03 sẽ dễ sử dụng hơn khi bạn đã có sẵn các yếu tố được lưu trữ trong một lần lặp

Một chức năng mới khác là

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
04. Bạn có thể sử dụng
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
05 để tìm phần nguyên của căn bậc hai

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
3

Căn bậc hai của 9 là 3. Bạn có thể thấy rằng

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
05 trả về một kết quả số nguyên, trong khi
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
07 luôn trả về một ____15_______2. Căn bậc hai của 15 gần bằng 3. 9. Lưu ý rằng
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
05 trả lời xuống số nguyên tiếp theo, trong trường hợp này là 3

Cuối cùng, giờ đây bạn có thể làm việc dễ dàng hơn với các điểm và vectơ n chiều trong thư viện chuẩn. Bạn có thể tìm khoảng cách giữa hai điểm với

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
10 và độ dài của một vectơ với
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
11

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
4

Điều này giúp làm việc với các điểm và vectơ dễ dàng hơn bằng thư viện chuẩn. Tuy nhiên, nếu bạn sẽ thực hiện nhiều phép tính trên các điểm hoặc vectơ, bạn nên xem NumPy

Mô-đun

>>> print(walrus := True)
True
99 cũng có một số chức năng mới

  • tính giá trị trung bình của
    >>> float(x="3.8")
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: float() takes no keyword arguments
    
    2 số
  • tính giá trị trung bình hình học của
    >>> float(x="3.8")
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: float() takes no keyword arguments
    
    2 số
  • tìm các giá trị xuất hiện thường xuyên nhất trong một chuỗi
  • tính toán các điểm cắt để chia dữ liệu thành n khoảng thời gian liên tục với xác suất bằng nhau

Ví dụ sau đây cho thấy các chức năng được sử dụng

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
5

Trong Python 3. 8, có một lớp mới thuận tiện hơn cho

Để xem ví dụ về việc sử dụng

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
20, bạn có thể thử so sánh tốc độ của
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
13 mới và
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
22 truyền thống

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
6

Trong ví dụ này, bạn sử dụng

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
23 để đo thời gian thực hiện của
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
24 và
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
25. Để có được kết quả đáng tin cậy, bạn để
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
23 thực hiện mỗi chức năng 100 lần và thu thập 30 mẫu thời gian như vậy cho mỗi chức năng. Dựa trên những mẫu này, bạn tạo hai đối tượng
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
20. Lưu ý rằng nếu bạn tự chạy mã, có thể mất tới một phút để thu thập các mẫu thời gian khác nhau

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
20 có nhiều thuộc tính và phương thức thuận tiện. Xem danh sách đầy đủ. Kiểm tra
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
29 và
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
30, bạn thấy rằng
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
22 cũ chạy bằng 0. 826 ± 0. 078 giây, trong khi
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
13 mới dành 0. 0105 ± 0. 0009 giây. Nói cách khác,
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
25 nhanh hơn khoảng 80 lần đối với những dữ liệu này

Nếu bạn cần số liệu thống kê nâng cao hơn bằng Python so với thư viện tiêu chuẩn cung cấp, hãy xem

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
34 và
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
35

Loại bỏ các quảng cáo

Cảnh báo về cú pháp nguy hiểm

Python có a có thể cảnh báo về cú pháp đáng ngờ thường không phải là

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
37. Trăn 3. 8 thêm một vài cái mới có thể giúp bạn trong quá trình mã hóa và gỡ lỗi

Sự khác biệt giữa

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
38 và
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
39 có thể gây nhầm lẫn. Cái sau kiểm tra các giá trị bằng nhau, trong khi
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
38 là
>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
2 chỉ khi các đối tượng giống nhau. Trăn 3. 8 sẽ cố gắng cảnh báo bạn về những trường hợp bạn nên sử dụng
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
39 thay vì
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
38

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
7

Rất dễ bỏ sót dấu phẩy khi viết ra một danh sách dài, đặc biệt là khi định dạng theo chiều dọc. Quên dấu phẩy trong danh sách các bộ dữ liệu sẽ đưa ra thông báo lỗi khó hiểu về các bộ dữ liệu không thể gọi được. Trăn 3. 8 cũng phát ra cảnh báo chỉ ra vấn đề thực sự

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
8

Cảnh báo xác định chính xác dấu phẩy bị thiếu là thủ phạm thực sự

tối ưu hóa

Có một số tối ưu hóa được thực hiện cho Python 3. 8. Một số làm cho mã chạy nhanh hơn. Những người khác giảm dung lượng bộ nhớ. Ví dụ: tra cứu các trường trong

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
44 nhanh hơn đáng kể trong Python 3. 8 so với Python 3. 7

>>>

inputs = list()
while (current := input("Write something: ")) != "quit":
    inputs.append(current)
9

Bạn có thể thấy rằng tra cứu

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
45 trên
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
44 nhanh hơn 30-40% trong Python 3. 8. Danh sách tiết kiệm một số không gian khi chúng được khởi tạo từ các lần lặp với độ dài đã biết. Điều này có thể tiết kiệm bộ nhớ

>>>

>>> float("3.8")
3.8

>>> help(float)
class float(object)
 |  float(x=0, /)
 |  
 |  Convert a string or number to a floating point number, if possible.

[...]
0

Trong trường hợp này, danh sách sử dụng bộ nhớ ít hơn khoảng 11% trong Python 3. 8 so với Python 3. 7

Các tối ưu hóa khác bao gồm hiệu suất tốt hơn trong

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
47, sao chép tệp nhanh hơn với
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
48, cải thiện hiệu suất mặc định trong
inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
49 và hoạt động nhanh hơn. Xem danh sách tối ưu hóa đầy đủ

Vì vậy, bạn có nên nâng cấp lên Python 3. số 8?

Hãy bắt đầu với câu trả lời đơn giản. Nếu bạn muốn dùng thử bất kỳ tính năng mới nào mà bạn đã thấy ở đây, thì bạn cần phải có khả năng sử dụng Python 3. 8. Các công cụ như

inputs = list()
current = input("Write something: ")
while current != "quit":
    inputs.append(current)
    current = input("Write something: ")
51 và giúp dễ dàng cài đặt nhiều phiên bản Python cạnh nhau. Ngoài ra, bạn có thể chạy Python 3 chính thức. 8 thùng chứa docker. Không có nhược điểm nào khi dùng thử Python 3. 8 cho mình

Bây giờ, đối với những câu hỏi phức tạp hơn. Bạn có nên nâng cấp môi trường sản xuất của mình lên Python 3 không. số 8? . 8 để tận dụng các tính năng mới?

Bạn sẽ gặp rất ít sự cố khi chạy Python 3. 7 mã trong Python 3. 8. Nâng cấp môi trường của bạn để chạy Python 3. 8 do đó khá an toàn và bạn sẽ có thể tận dụng lợi thế của phiên bản mới. Các phiên bản beta khác nhau của Python 3. 8 đã có sẵn trong nhiều tháng, vì vậy hy vọng rằng hầu hết các lỗi đã bị tiêu diệt. Tuy nhiên, nếu bạn muốn thận trọng, bạn có thể chờ cho đến khi phát hành bảo trì đầu tiên (Python 3. 8. 1) có sẵn

Khi bạn đã nâng cấp môi trường của mình, bạn có thể bắt đầu thử nghiệm các tính năng chỉ có trong Python 3. 8, chẳng hạn như và. Tuy nhiên, bạn nên ý thức về việc liệu những người khác có phụ thuộc vào mã của bạn hay không, vì điều này cũng sẽ buộc họ phải nâng cấp môi trường của họ. Các thư viện phổ biến có thể sẽ hỗ trợ ít nhất Python 3. 6 khá lâu

Xem để biết thêm thông tin về cách chuẩn bị mã của bạn cho Python 3. 8

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Các tính năng mới thú vị trong Python 3. 8

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Phiên bản Python 3.8 nào sẽ sử dụng

Gửi cho tôi thủ thuật Python »

Giới thiệu về Geir Arne Hjelle

Phiên bản Python 3.8 nào sẽ sử dụng
Phiên bản Python 3.8 nào sẽ sử dụng

Geir Arne là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python

» Thông tin thêm về Geir Arne


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Phiên bản Python 3.8 nào sẽ sử dụng

Aldren

Phiên bản Python 3.8 nào sẽ sử dụng

Jim

Phiên bản Python 3.8 nào sẽ sử dụng

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Tôi nên sử dụng phiên bản Python nào vào năm 2022?

Phiên bản Python 3. 10. 4 là bản phát hành ổn định hiện tại, bản phát hành bảo trì thứ tư của Python 3. 10, xuất bản ngày 24 tháng 3 năm 2022. Trong số các bổ sung và cải tiến khác, phiên bản này cung cấp số dòng chính xác để gỡ lỗi và các công cụ khác, bí danh loại rõ ràng, biến đặc tả tham số, v.v.

Tôi nên sử dụng phiên bản Python nào?

Nếu bạn muốn câu trả lời ngắn gọn, đây là. Bạn nên học Python 3 vì đây là phiên bản phù hợp nhất với các dự án khoa học dữ liệu hiện nay. Ngoài ra, nó rất dễ học và có một vài vấn đề về khả năng tương thích cần phải lo lắng.

Là Python 3. 8 vẫn được hỗ trợ?

Trăn 3. 7 sẽ ngừng nhận các bản cập nhật bảo mật vào tháng 6 năm 2023. Django 3. 2 sẽ ngừng nhận các bản cập nhật bảo mật vào tháng 4 năm 2024. Debian Buster sẽ ngừng nhận các bản cập nhật bảo mật vào tháng 6 năm 2024. Trăn 3. 8 sẽ ngừng nhận các bản cập nhật bảo mật vào tháng 10 năm 2024 .

Python3 là gì. 8 1?

Đây là Python 3. 8. 1, bản phát hành bảo trì đầu tiên của Python 3. 8 . Ghi chú. Bản phát hành bạn đang xem là Python 3. 8. 1, bản phát hành sửa lỗi cho phiên bản kế thừa 3. 8 loạt. Trăn 3. 11 hiện là loạt phát hành tính năng mới nhất của Python 3.