Python dành cho quản trị viên hệ thống PDF

Python dành cho quản trị viên hệ thống PDF

Show

Sách Python miễn phí, Sách Python Pdf, Sách Python Pdf, Tải xuống sách Python Pdf, Tải xuống miễn phí sách Python Pdf, Sách hướng dẫn Python miễn phí, Sách hướng dẫn Python Pdf, Sách hướng dẫn Python Pdf, Tải xuống sách hướng dẫn Python Pdf, Tải xuống sách hướng dẫn Python Pdf miễn phí

Packt đang có đợt giảm giá lớn nhất trong năm. Nhận Sách điện tử này hoặc bất kỳ cuốn sách, video hoặc khóa học nào khác mà bạn thích chỉ với $5 mỗi cuốn

Mua ngay

Mua các tiêu đề tương tự chỉ với 5 đô la

Làm chủ Python Scripting cho quản trị viên hệ thống

Đây là kho code Mastering Python Scripting for System Administrators, do Packt phát hành

Viết tập lệnh và tự động hóa chúng cho các tác vụ quản trị trong thế giới thực bằng Python

Cuốn sách này nói về cái gì?

Python đã phát triển theo thời gian và mở rộng các tính năng của nó đối với mọi hoạt động CNTT có thể. Python rất dễ học nhưng lại có các thư viện mạnh mẽ, có thể được sử dụng để xây dựng các tập lệnh Python mạnh mẽ nhằm giải quyết các vấn đề trong thế giới thực và tự động hóa các hoạt động thường ngày của quản trị viên. Nhiệm vụ của cuốn sách này là đi qua một loạt các dự án sẽ dạy cho người đọc kịch bản python với từng dự án

Cuốn sách này bao gồm các tính năng thú vị sau đây

  • Tìm hiểu cách cài đặt Python và gỡ lỗi Python Script
  • Hiểu và viết kịch bản để tự động kiểm tra & các hoạt động quản trị thông thường
  • Tìm hiểu cách viết tập lệnh để xử lý văn bản, mã hóa, giải mã và lưu trữ
  • Xử lý các tệp như pdf, excel, csv, txt và tạo báo cáo
  • Viết script quản trị Network từ xa bao gồm xử lý email
  • Xây dựng các công cụ tương tác với Giao diện người dùng đồ họa
  • Xử lý các tệp nhật ký Apache, giao tiếp API SOAP & REST
  • Tự động hóa quản trị cơ sở dữ liệu và thực hiện phân tích thống kê

Nếu bạn cảm thấy cuốn sách này là dành cho mình, hãy nhận bản sao của bạn ngay hôm nay

Python dành cho quản trị viên hệ thống PDF

Hướng dẫn và Điều hướng

Tất cả mã được sắp xếp vào các thư mục. Ví dụ, Chương02

Mã sẽ giống như sau

 >>> 3 * 'hi' + 'hello'
'hihihihello' 

Sau đây là những gì bạn cần cho cuốn sách này. Cuốn sách này sẽ lý tưởng cho những người dùng có một số hiểu biết cơ bản về lập trình Python và những người quan tâm đến việc mở rộng các kỹ năng lập trình của họ sang viết kịch bản dòng lệnh và quản trị hệ thống. Kiến thức trước về Python sẽ là cần thiết

Với danh sách phần cứng và phần mềm sau đây, bạn có thể chạy tất cả các tệp mã có trong sách (Chương 1-18)

Danh sách phần mềm và phần cứng

Chương Yêu cầu phần mềm LÀ bắt buộc Đối với tất cả các chương Python 3. 7Windows, Mac OS X và Linux (Bất kỳ)18MySQLWindows, Mac OS X và Linux (Bất kỳ)18SQliteWindows, Mac OS X và Linux (Bất kỳ)

Chúng tôi cũng cung cấp tệp PDF có hình ảnh màu của ảnh chụp màn hình/sơ đồ được sử dụng trong cuốn sách này. Nhấn vào đây để tải về nó

Những sảm phẩm tương tự

  • PowerShell Core dành cho quản trị viên Linux Sách dạy nấu ăn [Gói] [Amazon]

  • AWS Administration - The Definitive Guide - Second Edition [Packt] [Amazon]

Làm quen với tác giả

Ganesh Sanjiv Naik là tác giả, nhà tư vấn và huấn luyện viên doanh nghiệp trong các lĩnh vực AI, khoa học dữ liệu, học máy, Internet vạn vật (IoT) và Linux nhúng liên quan đến phát triển sản phẩm. Ông có hơn 20 năm kinh nghiệm chuyên môn trong lĩnh vực công nghệ thông tin. Ganesh có niềm đam mê và mong muốn sâu sắc đối với việc giảng dạy. Ông đã đào tạo hơn 2.000 kỹ sư về phát triển sản phẩm Linux và Android. Ông đã từng làm việc với tư cách là nhà đào tạo doanh nghiệp cho ISRO, Intel, GE, Samsung, Motorola, Trung tâm Phát triển Kỹ năng Penang (Malaysia) và nhiều công ty khác nhau ở Singapore, Malaysia và Ấn Độ. Anh ấy đã thành lập một công ty tên là Levana Technologies, hoạt động trong lĩnh vực AI, học máy và khoa học dữ liệu, cung cấp các hoạt động đào tạo, dự án và tư vấn

Bài viết này giải thích các tính năng mới trong Python 3. 8, so với 3. 7. Trăn 3. 8 được phát hành vào ngày 14 tháng 10 năm 2019. Để biết chi tiết đầy đủ, xem

Tóm tắt – Phát hành những điểm nổi bật

Các tính năng mới

biểu thức gán

Có cú pháp mới

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
6 gán giá trị cho các biến như một phần của biểu thức lớn hơn. Nó được gọi một cách trìu mến là “người điều hành hải mã” do giống với

Trong ví dụ này, biểu thức gán giúp tránh gọi hai lần

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

Một lợi ích tương tự phát sinh trong quá trình khớp biểu thức chính quy trong đó các đối tượng khớp được cần hai lần, một lần để kiểm tra xem có khớp hay không và một lần khác để trích xuất một nhóm con

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0

Toán tử cũng hữu ích với các vòng lặp while tính toán một giá trị để kiểm tra kết thúc vòng lặp và sau đó cần lại giá trị đó trong phần thân của vòng lặp

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)

Một trường hợp sử dụng thúc đẩy khác phát sinh trong việc hiểu danh sách trong đó một giá trị được tính toán trong điều kiện lọc cũng cần thiết trong nội dung biểu thức

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]

Cố gắng hạn chế sử dụng toán tử hải mã để làm sạch các trường hợp giúp giảm độ phức tạp và cải thiện khả năng đọc

Xem PEP 572 để biết mô tả đầy đủ

(Đóng góp bởi Emily Morehouse trong bpo-35224. )

Thông số chỉ vị trí

Có một cú pháp tham số chức năng mới

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
8 để chỉ ra rằng một số tham số chức năng phải được chỉ định theo vị trí và không thể được sử dụng làm đối số từ khóa. Đây là ký hiệu tương tự được hiển thị bởi
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
9 cho các hàm C được chú thích bằng công cụ của Larry Hastings

Trong ví dụ sau, tham số a và b chỉ là vị trí, trong khi c hoặc d có thể là vị trí hoặc từ khóa và e hoặc f bắt buộc phải là từ khóa

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

Sau đây là một cuộc gọi hợp lệ

f(10, 20, 30, d=40, e=50, f=60)

Tuy nhiên, đây là những cuộc gọi không hợp lệ

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
0

Một trường hợp sử dụng cho ký hiệu này là nó cho phép các hàm Python thuần túy mô phỏng đầy đủ các hành vi của các hàm được mã hóa C hiện có. Ví dụ: chức năng tích hợp không chấp nhận đối số từ khóa

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
1

Một trường hợp sử dụng khác là loại trừ đối số từ khóa khi tên tham số không hữu ích. Ví dụ: hàm dựng sẵn có chữ ký

f(10, 20, 30, d=40, e=50, f=60)
2. Điều này ngăn cản các cuộc gọi khó xử như

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
3

Một lợi ích nữa của việc đánh dấu một tham số là chỉ vị trí là nó cho phép thay đổi tên tham số trong tương lai mà không có nguy cơ phá vỡ mã máy khách. Ví dụ: trong mô-đun, tên tham số dist có thể được thay đổi trong tương lai. Điều này đã được thực hiện với đặc tả chức năng sau

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
4

Vì các tham số ở bên trái của

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
8 không được hiển thị dưới dạng các từ khóa có thể, nên các tên tham số vẫn có sẵn để sử dụng trong
f(10, 20, 30, d=40, e=50, f=60)
5

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
0

Điều này giúp đơn giản hóa rất nhiều việc triển khai các hàm và phương thức cần chấp nhận các đối số từ khóa tùy ý. Ví dụ: đây là một đoạn trích từ mã trong mô-đun

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
1

Xem PEP 570 để biết mô tả đầy đủ

(Đóng góp bởi Pablo Galindo trong bpo-36540. )

Bộ đệm hệ thống tệp song song cho các tệp bytecode đã biên dịch

Cài đặt mới (cũng có sẵn dưới dạng

f(10, 20, 30, d=40, e=50, f=60)
9) định cấu hình bộ đệm ẩn mã byte để sử dụng cây hệ thống tệp song song riêng biệt, thay vì các thư mục con
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
00 mặc định trong mỗi thư mục nguồn

Vị trí của bộ đệm được báo cáo trong ( cho biết vị trí mặc định trong thư mục con

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
00)

(Đóng góp bởi Carl Meyer trong bpo-33499. )

Bản dựng gỡ lỗi sử dụng cùng một ABI như bản dựng phát hành

Python hiện sử dụng cùng một ABI cho dù nó được tích hợp ở chế độ phát hành hay gỡ lỗi. Trên Unix, khi Python được xây dựng ở chế độ gỡ lỗi, giờ đây có thể tải các phần mở rộng C được xây dựng ở chế độ phát hành và các phần mở rộng C được xây dựng bằng ABI ổn định

Phát hành các bản dựng và hiện đã tương thích với ABI. xác định macro

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
04 không còn ngụ ý macro
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
05, đưa ra sự không tương thích ABI duy nhất. Có thể đặt macro
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
05, bổ sung thêm hàm
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
07 và biến môi trường bằng cách sử dụng tùy chọn bản dựng mới. (Đóng góp bởi Victor Stinner trong bpo-36465. )

Trên Unix, các tiện ích mở rộng của C không còn được liên kết với libpython ngoại trừ trên Android và Cygwin. Hiện tại, Python được liên kết tĩnh có thể tải tiện ích mở rộng C được tạo bằng thư viện Python được chia sẻ. (Đóng góp bởi Victor Stinner trong bpo-21536. )

Trên Unix, khi Python được xây dựng ở chế độ gỡ lỗi, giờ đây, quá trình nhập cũng tìm kiếm các tiện ích mở rộng C được biên dịch trong chế độ phát hành và các tiện ích mở rộng C được biên dịch với ABI ổn định. (Đóng góp bởi Victor Stinner trong bpo-36722. )

Để nhúng Python vào một ứng dụng, một tùy chọn

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
10 mới phải được chuyển cho
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
11 để nhận được
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
12 (liên kết ứng dụng với libpython). Để hỗ trợ cả 3. 8 trở lên, hãy thử
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
11 trước và dự phòng thành
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
14 (không có
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
10) nếu lệnh trước đó không thành công

Thêm mô-đun pkg-config

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
16 để nhúng Python vào ứng dụng.
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
17 bao gồm
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
12. Để hỗ trợ cả 3. 8 trở lên, trước tiên hãy thử dùng
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
19 và dự phòng bằng
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
30 (không có
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
10) nếu lệnh trước đó không thành công (thay thế
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
32 bằng phiên bản Python)

Mặt khác,

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
33 không còn chứa
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
12. Tiện ích mở rộng C không được liên kết với libpython (ngoại trừ trên Android và Cygwin, các trường hợp của chúng được xử lý bởi tập lệnh); . (Đóng góp bởi Victor Stinner trong bpo-36721. )

f-strings hỗ trợ def f(a, b, /, c, d, *, e, f): print(a, b, c, d, e, f) 35 cho các biểu thức tự ghi lại và gỡ lỗi

Đã thêm một trình xác định

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
35 vào s. Một chuỗi f chẳng hạn như
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
37 sẽ mở rộng thành văn bản của biểu thức, một dấu bằng, sau đó là biểu diễn của biểu thức được đánh giá. Ví dụ

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
2

Thông thường cho phép kiểm soát nhiều hơn cách hiển thị kết quả của biểu thức

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
3

Trình xác định

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
35 sẽ hiển thị toàn bộ biểu thức để có thể hiển thị các phép tính

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
4

(Đóng góp bởi Eric V. Smith và Larry Hastings trong bpo-36817. )

PEP 578. Móc kiểm tra thời gian chạy Python

PEP thêm một Audit Hook và Verified Open Hook. Cả hai đều có sẵn từ Python và mã gốc, cho phép các ứng dụng và khung được viết bằng mã Python thuần túy để tận dụng các thông báo bổ sung, đồng thời cho phép người nhúng hoặc quản trị viên hệ thống triển khai các bản dựng Python trong đó kiểm tra luôn được bật

Xem PEP 578 để biết đầy đủ chi tiết

PEP 587. Cấu hình khởi tạo Python

PEP 587 thêm API C mới để định cấu hình Khởi tạo Python cung cấp khả năng kiểm soát tốt hơn trên toàn bộ cấu hình và báo cáo lỗi tốt hơn

cấu trúc mới

chức năng mới

  • def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    43

  • def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    44

  • def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    45

  • def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    46

  • def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    47

  • def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    48

  • def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    49

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    00

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    01

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    02

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    03

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    04

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    05

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    06

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    07

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    08

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    09

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    10

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    11

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    13

PEP này cũng thêm các trường

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
19 ( loại) và
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
21 ( loại) vào các cấu trúc bên trong này.
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
21 trở thành cấu hình tham chiếu mới, thay thế các biến cấu hình toàn cầu và các biến riêng tư khác

Xem tài liệu

Xem PEP 587 để biết mô tả đầy đủ

(Đóng góp bởi Victor Stinner trong bpo-36763. )

PEP 590. cuộc gọi véc tơ. một giao thức gọi nhanh cho CPython

được thêm vào API Python/C. Nó có nghĩa là để chính thức hóa các tối ưu hóa hiện có đã được thực hiện cho các lớp khác nhau. Mọi triển khai có thể gọi được đều có thể sử dụng giao thức này

Đây là tạm thời. Mục đích là làm cho nó hoàn toàn công khai trong Python 3. 9

Xem PEP 590 để biết mô tả đầy đủ

(Đóng góp bởi Jeroen Demeyer, Mark Shannon và Petr Viktorin trong bpo-36974. )

Pickle giao thức 5 với bộ đệm dữ liệu ngoài băng tần

Khi được sử dụng để truyền dữ liệu lớn giữa các quy trình Python nhằm tận dụng lợi thế của quá trình xử lý đa lõi hoặc nhiều máy, điều quan trọng là phải tối ưu hóa quá trình truyền bằng cách giảm các bản sao bộ nhớ và có thể bằng cách áp dụng các kỹ thuật tùy chỉnh như nén phụ thuộc vào dữ liệu

Giao thức 5 giới thiệu hỗ trợ cho các bộ đệm ngoài băng trong đó dữ liệu tương thích với PEP 3118 có thể được truyền riêng biệt với luồng pickle chính, theo quyết định của lớp giao tiếp

Xem PEP 574 để biết mô tả đầy đủ

(Đóng góp bởi Antoine Pitrou trong bpo-36785. )

Thay đổi ngôn ngữ khác

  • Một tuyên bố là bất hợp pháp trong điều khoản do một vấn đề với việc thực hiện. Trong Trăn 3. 8 hạn chế này đã được dỡ bỏ. (Đóng góp bởi Serhiy Storchaka trong bpo-32489. )

  • Các , và các loại hiện có một phương thức giống như được tìm thấy trong và. Tiện ích mở rộng API nhỏ này giúp bạn có thể viết

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    34 và để nó hoạt động trên nhiều loại số. (Đóng góp bởi Lisa Roach trong bpo-33073 và Raymond Hettinger trong bpo-37819. )

  • Các hàm tạo của , và bây giờ sẽ sử dụng phương thức đặc biệt, nếu có và phương thức tương ứng, hoặc không có sẵn. (Đóng góp bởi Serhiy Storchaka trong bpo-20092. )

  • Đã thêm hỗ trợ của

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    42 thoát trong

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    5

    (Đóng góp bởi Jonathan Eunice và Serhiy Storchaka trong bpo-30688. )

  • Dict và dictviews hiện có thể lặp lại theo thứ tự chèn đảo ngược bằng cách sử dụng. (Đóng góp bởi Rémi Lapeyre trong bpo-33462. )

  • Cú pháp cho phép tên từ khóa trong lời gọi hàm bị hạn chế hơn nữa. Đặc biệt,

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    45 không còn được phép. Nó không bao giờ có ý định cho phép nhiều hơn một tên trần ở phía bên trái của thuật ngữ gán đối số từ khóa. (Đóng góp bởi Benjamin Peterson trong bpo-34641. )

  • Giải nén lặp lại tổng quát trong và các câu lệnh không còn yêu cầu dấu ngoặc đơn kèm theo. Điều này làm cho cú pháp năng suất và trả về phù hợp hơn với cú pháp gán thông thường

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    6

    (Đóng góp bởi David Cuthbert và Jordan Chapman trong bpo-32117. )

  • Khi một dấu phẩy bị thiếu trong mã chẳng hạn như

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    48, trình biên dịch sẽ hiển thị một gợi ý hữu ích. Điều này cải thiện khi chỉ có một biểu thị rằng bộ dữ liệu đầu tiên không thể gọi được. (Đóng góp bởi Serhiy Storchaka trong bpo-15248. )

  • Các phép toán số học giữa các lớp con của hoặc và các đối tượng hiện trả về một thể hiện của lớp con, thay vì lớp cơ sở. Điều này cũng ảnh hưởng đến loại hoạt động trả về mà việc thực hiện (trực tiếp hoặc gián tiếp) sử dụng số học, chẳng hạn như. (Đóng góp bởi Paul Ganssle trong bpo-32417. )

  • Khi trình thông dịch Python bị gián đoạn bởi Ctrl-C (SIGINT) và ngoại lệ kết quả không bị bắt, quy trình Python hiện thoát qua tín hiệu SIGINT hoặc với mã thoát chính xác để quy trình gọi có thể phát hiện ra rằng nó đã chết do Ctrl . Shell trên POSIX và Windows sử dụng điều này để chấm dứt tập lệnh đúng cách trong các phiên tương tác. (Được đóng góp bởi Google thông qua Gregory P. Smith trong bpo-1054041. )

  • Một số kiểu lập trình nâng cao yêu cầu cập nhật đối tượng cho một chức năng hiện có. Vì các đối tượng mã là bất biến, nên cần tạo một đối tượng mã mới, một đối tượng mã được mô hình hóa trên đối tượng mã hiện có. Với 19 tham số, điều này hơi tẻ nhạt. Bây giờ, phương pháp mới

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    58 cho phép tạo một bản sao với một vài tham số đã thay đổi

    Đây là một ví dụ thay đổi chức năng để ngăn tham số dữ liệu được sử dụng làm đối số từ khóa

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    7

    (Đóng góp bởi Victor Stinner trong bpo-37032. )

  • Đối với các số nguyên, dạng ba đối số của hàm hiện cho phép số mũ âm trong trường hợp cơ số tương đối nguyên tố với mô đun. Sau đó, nó tính toán một nghịch đảo mô-đun với cơ số khi số mũ là

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    61 và một lũy thừa phù hợp của nghịch đảo đó đối với các số mũ âm khác. Ví dụ: để tính nghịch đảo phép nhân theo mô-đun của 38 theo mô-đun 137, hãy viết

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    8

    Nghịch đảo mô-đun phát sinh trong giải pháp của phương trình Diophantine tuyến tính. Ví dụ: để tìm nghiệm số nguyên cho

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    62, trước tiên hãy viết lại thành
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    63 rồi giải

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    9

    (Đóng góp bởi Mark Dickinson trong bpo-36027. )

  • Khả năng hiểu chính tả đã được đồng bộ hóa với các chữ chính tả để khóa được tính trước và giá trị thứ hai

    # Loop over fixed length blocks
    while (block := f.read(256)) != '':
        process(block)
    
    0

    Thứ tự thực hiện được đảm bảo hữu ích với các biểu thức gán vì các biến được gán trong biểu thức chính sẽ có sẵn trong biểu thức giá trị

    # Loop over fixed length blocks
    while (block := f.read(256)) != '':
        process(block)
    
    1

    (Đóng góp bởi Jörn Heissler trong bpo-35224. )

  • Phương thức bây giờ có thể trả về một tuple dài từ hai đến sáu phần tử. Trước đây, năm là giới hạn. Phần tử thứ sáu mới, tùy chọn có thể gọi được với chữ ký

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    65. Điều này cho phép kiểm soát trực tiếp hành vi cập nhật trạng thái của một đối tượng cụ thể. Nếu không phải là Không, khả năng gọi này sẽ được ưu tiên hơn phương thức
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    66 của đối tượng. (Đóng góp bởi Pierre Glaser và Olivier Grisel trong bpo-35900. )

Mô-đun mới

  • Mô-đun mới cung cấp hỗ trợ (tạm thời) để đọc siêu dữ liệu từ các gói của bên thứ ba. Ví dụ: nó có thể trích xuất số phiên bản của gói đã cài đặt, danh sách các điểm vào, v.v.

    # Loop over fixed length blocks
    while (block := f.read(256)) != '':
        process(block)
    
    2

    (Đóng góp bởi Barry Warsaw và Jason R. Coombs trong bpo-34632. )

Mô-đun cải tiến

ast

Các nút AST hiện có các thuộc tính

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
68 và
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
69, cung cấp vị trí chính xác của phần cuối của nút. (Điều này chỉ áp dụng cho các nút có thuộc tính
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
70 và
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
71. )

Chức năng mới trả về mã nguồn cho một nút AST cụ thể

(Đóng góp bởi Ivan Levkivskyi trong bpo-33416. )

Chức năng có một số cờ mới

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    74 khiến nó trả về văn bản của các nhận xét loại PEP 484 và PEP 526 được liên kết với các nút AST nhất định;

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    75 có thể được sử dụng để phân tích cú pháp PEP 484 “nhận xét kiểu chữ ký” (được trả về cho các nút AST định nghĩa chức năng);

  • discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    76 cho phép chỉ định phiên bản Python 3 cũ hơn. Ví dụ:
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    77 sẽ coi và là từ không dành riêng

(Đóng góp bởi Guido van Rossum trong bpo-35766. )

không đồng bộ

đã chuyển từ API tạm thời sang API ổn định. Hàm này có thể được sử dụng để thực thi a và trả về kết quả trong khi tự động quản lý vòng lặp sự kiện. Ví dụ

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
3

Điều này gần tương đương với

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
4

Việc triển khai thực tế phức tạp hơn nhiều. Do đó, nên là cách ưa thích để chạy các chương trình asyncio

(Đóng góp bởi Yury Selivanov trong bpo-32314. )

Chạy

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
82 khởi chạy REPL không đồng bộ nguyên bản. Điều này cho phép thử nghiệm nhanh chóng với mã có mức cao nhất. Không còn cần phải gọi trực tiếp
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
80 sẽ tạo ra một vòng lặp sự kiện mới trên mỗi lần gọi

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
5

(Đóng góp bởi Yury Selivanov trong bpo-37028. )

Ngoại lệ bây giờ kế thừa từ thay vì và không còn kế thừa từ. (Đóng góp bởi Yury Selivanov trong bpo-32528. )

Trên Windows, vòng lặp sự kiện mặc định hiện là. (Đóng góp bởi Victor Stinner trong bpo-34687. )

bây giờ cũng hỗ trợ UDP. (Đóng góp bởi Adam Meily và Andrew Svetlov trong bpo-29883. )

bây giờ có thể bị gián đoạn bởi (“CTRL+C”). (Đóng góp bởi Vladimir Matveev trong bpo-23057. )

Đã thêm để nhận coroutine được bao bọc trong một. (Đóng góp bởi Alex Grönholm trong bpo-36999. )

Các tác vụ Asyncio hiện có thể được đặt tên, bằng cách chuyển đối số từ khóa

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
95 hoặc phương thức vòng lặp sự kiện hoặc bằng cách gọi phương thức trên đối tượng tác vụ. Tên tác vụ hiển thị trong đầu ra
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
99 của và cũng có thể được truy xuất bằng phương thức. (Đóng góp bởi Alex Grönholm trong bpo-34270. )

Đã thêm hỗ trợ cho Happy Eyeballs vào. Để chỉ định hành vi, hai tham số mới đã được thêm vào. happy_eyeballs_delay và xen kẽ. Thuật toán Happy Eyeballs cải thiện khả năng phản hồi trong các ứng dụng hỗ trợ IPv4 và IPv6 bằng cách cố gắng kết nối đồng thời bằng cả hai. (Đóng góp bởi đại sứ twisteroid trong bpo-33530. )

nội trang

Tích hợp sẵn đã được cải thiện để chấp nhận cờ

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
04. Khi cờ mới này được thông qua, sẽ cho phép các cấu trúc
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0
79,
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
07 và
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
08 cấp cao nhất thường được coi là cú pháp không hợp lệ. Sau đó, đối tượng mã không đồng bộ được đánh dấu bằng cờ
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
09 có thể được trả về. (Đóng góp bởi Matthias Bussonnier trong bpo-34616)

bộ sưu tập

Phương thức bây giờ trả về a thay vì a. Điều này hoạt động vì các ký tự thông thường đã đảm bảo đặt hàng kể từ Python 3. 7. Nếu các tính năng bổ sung của

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
14 được yêu cầu, cách khắc phục được đề xuất là chuyển kết quả sang loại mong muốn.
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
15. (Đóng góp bởi Raymond Hettinger trong bpo-35864. )

hồ sơ c

Bây giờ lớp có thể được sử dụng như một trình quản lý ngữ cảnh. Cấu hình một khối mã bằng cách chạy

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
6

(Đóng góp bởi Scott Sanderson trong bpo-29235. )

csv

Bây giờ trả về các trường hợp thay vì một. Công cụ hiện nhanh hơn và sử dụng ít bộ nhớ hơn trong khi vẫn giữ nguyên thứ tự trường. (Đóng góp bởi Michael Selik trong bpo-34003. )

nguyền rủa

Đã thêm một biến mới chứa thông tin phiên bản có cấu trúc cho thư viện ncurses bên dưới. . (Đóng góp bởi Serhiy Storchaka trong bpo-31680. )

ctypes

Trên Windows và các lớp con hiện chấp nhận tham số winmode để chỉ định cờ cho lệnh gọi

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
22 bên dưới. Các cờ mặc định được đặt thành chỉ tải các phần phụ thuộc DLL từ các vị trí đáng tin cậy, bao gồm đường dẫn nơi lưu trữ DLL (nếu đường dẫn đầy đủ hoặc một phần được sử dụng để tải DLL ban đầu) và các đường dẫn được thêm bởi. (Đóng góp bởi Steve Dower trong bpo-36085. )

ngày giờ

Đã thêm các hàm tạo thay thế mới và , cấu trúc này tạo nên

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
26 và các đối tượng tương ứng từ năm ISO, số tuần và ngày trong tuần; . (Đóng góp bởi Paul Ganssle trong bpo-36004. )

công cụ chức năng

bây giờ có thể được sử dụng như một công cụ trang trí thẳng thay vì là một hàm trả về một công cụ trang trí. Vì vậy, cả hai đều được hỗ trợ

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
7

(Đóng góp bởi Raymond Hettinger trong bpo-36772. )

Đã thêm một trình trang trí mới, cho các thuộc tính được tính toán được lưu trong bộ nhớ cache cho vòng đời của phiên bản

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
8

(Đóng góp bởi Carl Meyer trong bpo-21145)

Đã thêm một trình trang trí mới chuyển đổi các phương thức thành sử dụng

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
9

(Đóng góp bởi Ethan Smith trong bpo-32380)

gc

bây giờ có thể nhận một tham số tạo tùy chọn cho biết một thế hệ để lấy các đối tượng từ. (Đóng góp bởi Pablo Galindo trong bpo-36016. )

lấy văn bản

Đã thêm và các biến thể của nó. (Được đóng góp bởi Franz Glasner, Éric Araujo và Cheryl Sabella trong bpo-2504. )

gzip

Đã thêm tham số mtime cho đầu ra có thể lặp lại. (Đóng góp bởi Guo Ci Teo trong bpo-34898. )

Một ngoại lệ hiện được đưa ra thay vì dành cho một số loại tệp gzip không hợp lệ hoặc bị hỏng. (Đóng góp bởi Filip Gruszczyński, Michele Orrù, và Zackery Spytz trong bpo-6584. )

IDLE và idlib

Đầu ra trên N dòng (50 theo mặc định) được nén xuống một nút. Có thể thay đổi N trong phần PyShell của trang Chung của hộp thoại Cài đặt. Ít dòng hơn, nhưng có thể dài hơn, có thể được nén bằng cách nhấp chuột phải vào đầu ra. Đầu ra đã ép có thể được mở rộng tại chỗ bằng cách nhấp đúp vào nút hoặc vào khay nhớ tạm hoặc một cửa sổ riêng bằng cách nhấp chuột phải vào nút. (Đóng góp bởi Tal Einat trong bpo-1529353. )

Thêm “Chạy tùy chỉnh” vào menu Chạy để chạy mô-đun với cài đặt tùy chỉnh. Mọi đối số dòng lệnh đã nhập đều được thêm vào sys. argv. Chúng cũng xuất hiện lại trong hộp cho lần chạy tùy chỉnh tiếp theo. Người ta cũng có thể chặn khởi động lại mô-đun chính Shell bình thường. (Được đóng góp bởi Cheryl Sabella, Terry Jan Reedy và những người khác trong bpo-5680 và bpo-37627. )

Đã thêm số dòng tùy chọn cho cửa sổ trình chỉnh sửa IDLE. Windows mở mà không có số dòng trừ khi được đặt khác trong tab Chung của hộp thoại cấu hình. Số dòng cho một cửa sổ hiện có được hiển thị và ẩn trong menu Tùy chọn. (Đóng góp bởi Tal Einat và Saimadhav Heblikar trong bpo-17535. )

Mã hóa gốc của hệ điều hành hiện được sử dụng để chuyển đổi giữa các chuỗi Python và các đối tượng Tcl. Điều này cho phép IDLE hoạt động với biểu tượng cảm xúc và các ký tự không phải BMP khác. Những ký tự này có thể được hiển thị hoặc sao chép và dán vào hoặc từ khay nhớ tạm. Chuyển đổi chuỗi từ Tcl sang Python và ngược lại không bao giờ thất bại. (Nhiều người đã làm việc này trong tám năm nhưng vấn đề cuối cùng đã được giải quyết bởi Serhiy Storchaka trong bpo-13153. )

Mới trong 3. 8. 1

Thêm tùy chọn để tắt nhấp nháy con trỏ. (Đóng góp bởi Zackery Spytz trong bpo-4603. )

Phím thoát hiện đóng các cửa sổ hoàn thành IDLE. (Đóng góp bởi Johnny Najera trong bpo-38944. )

Những thay đổi ở trên đã được nhập vào 3. 7 bản phát hành bảo trì

Thêm từ khóa vào danh sách hoàn thành tên mô-đun. (Đóng góp bởi Terry J. Sậy trong bpo-37765. )

quan sát

Giờ đây, hàm có thể tìm thấy các chuỗi tài liệu cho

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
38 nếu thuộc tính đó là một trong đó các giá trị là các chuỗi tài liệu. Điều này cung cấp các tùy chọn tài liệu tương tự như những gì chúng tôi đã có cho , và

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
0

(Đóng góp bởi Raymond Hettinger trong bpo-36326. )

io

Trong chế độ phát triển (

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
44) và trong , trình hoàn thiện hiện ghi lại ngoại lệ nếu phương thức
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
46 không thành công. Ngoại lệ được bỏ qua âm thầm theo mặc định trong bản dựng phát hành. (Đóng góp bởi Victor Stinner trong bpo-18748. )

itertools

Hàm đã thêm một đối số từ khóa ban đầu tùy chọn để chỉ định giá trị ban đầu

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
1

(Đóng góp bởi Lisa Roach trong bpo-34659. )

json. dụng cụ

Thêm tùy chọn

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
48 để phân tích mọi dòng đầu vào thành một đối tượng JSON riêng biệt. (Đóng góp bởi Weipeng Hong trong bpo-31553. )

khai thác gỗ

Đã thêm một đối số từ khóa bắt buộc vào Khi được đặt thành đúng, mọi trình xử lý hiện có được đính kèm với bộ ghi gốc sẽ bị xóa và đóng trước khi thực hiện cấu hình được chỉ định bởi các đối số khác

Điều này giải quyết một vấn đề lâu dài. Khi một trình ghi nhật ký hoặc basicConfig() đã được gọi, các lệnh gọi tiếp theo tới basicConfig() sẽ bị bỏ qua một cách âm thầm. Điều này gây khó khăn cho việc cập nhật, thử nghiệm hoặc hướng dẫn các tùy chọn cấu hình ghi nhật ký khác nhau bằng lời nhắc tương tác hoặc sổ ghi chép Jupyter

(Được đề xuất bởi Raymond Hettinger, được thực hiện bởi Dong-hee Na và được Vinay Sajip xem xét trong bpo-33897. )

môn Toán

Đã thêm chức năng mới để tính toán khoảng cách Euclide giữa hai điểm. (Đóng góp bởi Raymond Hettinger trong bpo-33089. )

Đã mở rộng chức năng để xử lý nhiều chiều. Trước đây, nó chỉ hỗ trợ trường hợp 2-D. (Đóng góp bởi Raymond Hettinger trong bpo-33089. )

Đã thêm hàm mới, , dưới dạng hàm tương tự để trả về tích của giá trị 'bắt đầu' (mặc định. 1) lần lặp lại các số

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
2

(Đóng góp bởi Pablo Galindo trong bpo-35606. )

Đã thêm hai hàm tổ hợp mới và

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
3

(Được đóng góp bởi Yash Aggarwal, Keller Fuchs, Serhiy Storchaka và Raymond Hettinger trong bpo-37128, bpo-37178 và bpo-35431. )

Đã thêm một chức năng mới để tính căn bậc hai số nguyên chính xác mà không cần chuyển đổi sang dấu phẩy động. Hàm mới hỗ trợ các số nguyên lớn tùy ý. Nó nhanh hơn

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
57 nhưng chậm hơn

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
4

(Đóng góp bởi Mark Dickinson trong bpo-36887. )

Hàm không còn chấp nhận các đối số không giống như int. (Đóng góp bởi Pablo Galindo trong bpo-33083. )

mmap

Lớp hiện có một phương thức để truy cập cuộc gọi hệ thống

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
61. (Đóng góp bởi Zackery Spytz trong bpo-32941. )

đa xử lý

Đã thêm mô-đun mới. (Đóng góp bởi Davin Potts trong bpo-35813. )

Trên macOS, phương thức bắt đầu sinh sản hiện được sử dụng theo mặc định. (Đóng góp bởi Victor Stinner trong bpo-33725. )

hệ điều hành

Đã thêm chức năng mới trên Windows để cung cấp các đường dẫn tìm kiếm bổ sung cho các phụ thuộc riêng khi nhập các mô-đun mở rộng hoặc tải DLL bằng cách sử dụng. (Đóng góp bởi Steve Dower trong bpo-36085. )

Một chức năng mới đã được thêm vào để bao bọc tòa nhà chọc trời

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
67. (Đóng góp bởi Zackery Spytz và Christian Heimes trong bpo-26836. )

Trên Windows, phần lớn logic thủ công để xử lý các điểm lặp lại (bao gồm các liên kết tượng trưng và các đường nối thư mục) đã được ủy quyền cho hệ điều hành. Cụ thể, bây giờ sẽ duyệt qua mọi thứ được hệ điều hành hỗ trợ, trong khi sẽ chỉ mở các điểm phân tích lại được xác định là "tên thay thế" trong khi các điểm khác được mở như đối với. Trong mọi trường hợp,

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
71 sẽ chỉ có
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
72 được đặt cho các liên kết tượng trưng chứ không phải các loại điểm lặp lại khác. Để xác định các loại điểm phân tích cú pháp khác, hãy kiểm tra thuộc tính
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
73 mới

Trên Windows, giờ đây có thể đọc các mối nối thư mục. Lưu ý rằng sẽ trả về

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
76 cho các liên kết thư mục và vì vậy mã kiểm tra
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
77 trước tiên sẽ tiếp tục coi các liên kết là thư mục, trong khi mã xử lý lỗi từ bây giờ có thể coi các liên kết là liên kết

(Đóng góp bởi Steve Dower trong bpo-37834. )

hệ điều hành. con đường

các hàm trả về kết quả boolean như , , , , và giờ đây trả về

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
76 thay vì nâng cao hoặc các lớp con của nó và cho các đường dẫn chứa các ký tự hoặc byte không thể biểu diễn ở cấp hệ điều hành. (Đóng góp bởi Serhiy Storchaka trong bpo-33721. )

trên Windows hiện ưu tiên biến môi trường

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
91 và không sử dụng
# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
92, biến này thường không được đặt cho tài khoản người dùng thông thường. (Đóng góp bởi Anthony Sottile trong bpo-36264. )

trên Windows không còn trả về

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
94 cho một liên kết đến một thư mục không tồn tại

trên Windows hiện giải quyết các điểm phân tích lại, bao gồm các liên kết tượng trưng và các đường nối thư mục

(Đóng góp bởi Steve Dower trong bpo-37834. )

đường dẫn

các phương thức trả về kết quả boolean như , , , , , , , , giờ đây trả về

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
76 thay vì nâng cao hoặc lớp con của nó cho các đường dẫn chứa các ký tự không thể biểu diễn ở cấp hệ điều hành. (Đóng góp bởi Serhiy Storchaka trong bpo-33721. )

Đã thêm để tạo một liên kết cứng trỏ đến một đường dẫn. (Đóng góp bởi Joannah Nanjekye trong bpo-26978)

dưa chua

các phần mở rộng phân lớp con được tối ưu hóa cho C giờ đây có thể ghi đè logic chọn lọc của các hàm và lớp bằng cách xác định phương thức đặc biệt. (Đóng góp bởi Pierre Glaser và Olivier Grisel trong bpo-35900. )

plistlib

Đã thêm hỗ trợ mới và được kích hoạt để đọc và viết các bảng nhị phân được mã hóa NSKeyedArchiver. (Đóng góp bởi Jon Janzen trong bpo-26707. )

bản in

Mô-đun đã thêm tham số sort_dicts vào một số chức năng. Theo mặc định, các chức năng đó tiếp tục sắp xếp từ điển trước khi hiển thị hoặc in. Tuy nhiên, nếu sort_dicts được đặt thành false, từ điển sẽ giữ nguyên thứ tự các phím được chèn. Điều này có thể hữu ích để so sánh với các đầu vào JSON trong quá trình gỡ lỗi

Ngoài ra, có một chức năng mới tiện lợi, giống như nhưng với sort_dicts mặc định là

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)
76

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
5

(Đóng góp bởi Rémi Lapeyre trong bpo-30670. )

py_compile

hiện hỗ trợ chế độ im lặng. (Đóng góp bởi Joannah Nanjekye trong bpo-22640. )

bánh mì

Hàm mới hoạt động như nghịch đảo của. (Đóng góp bởi Bo Bayles trong bpo-32102. )

đóng cửa

hiện chấp nhận đối số từ khóa

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
22 mới. (Đóng góp bởi Josh Bronson trong bpo-20849. )

hiện mặc định là pax hiện đại (POSIX. 1-2001) cho các kho lưu trữ mới để cải thiện tính di động và tuân thủ tiêu chuẩn, kế thừa từ thay đổi tương ứng đối với mô-đun. (Đóng góp bởi C. A. M. Gerlach trong bpo-30661. )

trên Windows hiện loại bỏ các liên kết thư mục mà không cần xóa đệ quy nội dung của chúng trước. (Đóng góp bởi Steve Dower trong bpo-37834. )

ổ cắm

Đã thêm và các chức năng tiện lợi để tự động hóa các tác vụ cần thiết thường liên quan khi tạo ổ cắm máy chủ, bao gồm chấp nhận cả kết nối IPv4 và IPv6 trên cùng một ổ cắm. (Đóng góp bởi Giampaolo Rodolà trong bpo-17561. )

Các hàm , , và đã được triển khai trên Windows. (Đóng góp bởi Zackery Spytz trong bpo-37007. )

ssl

Đã thêm để bật và khởi tạo TLS 1. 3 xác thực sau bắt tay. (Đóng góp bởi Christian Heimes trong bpo-34670. )

số liệu thống kê

Đã thêm dưới dạng biến thể dấu phẩy động nhanh hơn của. (Đóng góp bởi Raymond Hettinger và Steven D'Aprano trong bpo-35904. )

Đã thêm (Đóng góp bởi Raymond Hettinger trong bpo-27181. )

Đã thêm trả về danh sách các giá trị phổ biến nhất. (Đóng góp bởi Raymond Hettinger trong bpo-35892. )

Đã thêm phân chia dữ liệu hoặc phân phối thành các khoảng có thể trang bị được (e. g. phần tư, deciles hoặc phần trăm). (Đóng góp bởi Raymond Hettinger trong bpo-36546. )

Đã thêm, một công cụ để tạo và thao tác phân phối bình thường của một biến ngẫu nhiên. (Đóng góp bởi Raymond Hettinger trong bpo-36018. )

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
6

hệ thống

Thêm chức năng mới có thể được ghi đè để kiểm soát cách xử lý "ngoại lệ không thể chấp nhận được". Nó được gọi khi một ngoại lệ xảy ra nhưng không có cách nào để Python xử lý nó. Ví dụ: khi hàm hủy phát sinh ngoại lệ hoặc trong quá trình thu gom rác (). (Đóng góp bởi Victor Stinner trong bpo-36829. )

tarfile

Mô-đun hiện mặc định là pax hiện đại (POSIX. 1-2001) cho các kho lưu trữ mới, thay vì định dạng dành riêng cho GNU trước đây. Điều này cải thiện tính di động đa nền tảng với mã hóa nhất quán (UTF-8) ở định dạng chuẩn hóa và có thể mở rộng, đồng thời mang lại một số lợi ích khác. (Đóng góp bởi C. A. M. Gerlach trong bpo-36268. )

xâu chuỗi

Thêm một chức năng mới xử lý ngoại lệ chưa được phát hiện. Nó có thể được ghi đè để kiểm soát cách xử lý các ngoại lệ chưa được phát hiện. (Đóng góp bởi Victor Stinner trong bpo-1230540. )

Thêm một chức năng mới và một thuộc tính cho lớp. Chúng trả về ID luồng tích phân riêng của luồng hiện tại được chỉ định bởi kernel. Tính năng này chỉ khả dụng trên một số nền tảng nhất định, hãy xem để biết thêm thông tin. (Đóng góp bởi Jake Tesler trong bpo-36084. )

token hóa

Mô-đun hiện ngầm phát ra mã thông báo

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
50 khi được cung cấp đầu vào không có dòng mới ở cuối. Hành vi này hiện khớp với những gì mã thông báo C thực hiện trong nội bộ. (Đóng góp bởi Ammar Askar trong bpo-33899. )

tkinter

Đã thêm các phương thức ________ 551, ________ 552, ________ 553 và

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
54 trong lớp ________ 555. (Đóng góp bởi Juliette Monsel trong bpo-34829. )

Đã thêm phương thức

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
56 vào lớp
[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
57. (Đóng góp bởi Juliette Monsel trong bpo-23831. )

Lớp

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
58 hiện có các phương thức
[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
59 và
[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
60. (Đóng góp bởi Zackery Spytz trong bpo-25451. )

thời gian

Đã thêm đồng hồ mới cho macOS 10. 12. (Đóng góp bởi Joannah Nanjekye trong bpo-35702. )

đánh máy

Mô-đun kết hợp một số tính năng mới

  • Loại từ điển với các loại theo khóa. Xem PEP 589 và. TypedDict chỉ sử dụng các phím chuỗi. Theo mặc định, mọi khóa được yêu cầu phải có mặt. Chỉ định “total=False” để cho phép các phím là tùy chọn

    [clean_name.title() for name in names
     if (clean_name := normalize('NFC', name)) in allowed_names]
    
    7

  • các loại chữ. Xem PEP 586 và. Các loại chữ chỉ ra rằng một tham số hoặc giá trị trả về bị ràng buộc với một hoặc nhiều giá trị chữ cụ thể

    [clean_name.title() for name in names
     if (clean_name := normalize('NFC', name)) in allowed_names]
    
    8

  • Các biến, hàm, phương thức và lớp “cuối cùng”. Xem PEP 591, và. Vòng loại cuối cùng hướng dẫn trình kiểm tra kiểu tĩnh hạn chế phân lớp con, ghi đè hoặc gán lại

    [clean_name.title() for name in names
     if (clean_name := normalize('NFC', name)) in allowed_names]
    
    9

  • định nghĩa giao thức. Xem PEP 544, và. Các ABC đơn giản như bây giờ là lớp con của

    [clean_name.title() for name in names
     if (clean_name := normalize('NFC', name)) in allowed_names]
    
    70

  • Lớp giao thức mới

  • chức năng mới và

unicodedata

Mô-đun đã được nâng cấp để sử dụng Unicode 12. 1. 0 phát hành

Chức năng mới có thể được sử dụng để xác minh một chuỗi ở dạng bình thường cụ thể, thường nhanh hơn nhiều so với việc thực sự chuẩn hóa chuỗi. (Được đóng góp bởi Max Belanger, David Euresti và Greg Price trong bpo-32285 và bpo-37966)

đơn vị nhất

Đã thêm để hỗ trợ phiên bản không đồng bộ của. Các chức năng xác nhận mới phù hợp để thử nghiệm cũng đã được thêm vào. (Đóng góp bởi Lisa Roach trong bpo-26467)

Đã thêm và vào unittest để hỗ trợ dọn dẹp cho

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
80 và. (Đóng góp bởi Lisa Roach trong bpo-24412. )

Một số chức năng xác nhận giả hiện cũng in danh sách các cuộc gọi thực tế khi thất bại. (Đóng góp bởi Petter Strandmark trong bpo-35047. )

mô-đun đã nhận được hỗ trợ cho coroutines được sử dụng làm trường hợp thử nghiệm với. (Đóng góp bởi Andrew Svetlov trong bpo-32972. )

Ví dụ

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
0

venv

hiện bao gồm tập lệnh

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
85 trên tất cả các nền tảng để kích hoạt môi trường ảo trong PowerShell Core 6. 1. (Đóng góp bởi Brett Cannon trong bpo-32718. )

yếu kém

Các đối tượng proxy được trả về hiện hỗ trợ các toán tử nhân ma trận

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
87 và
[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
88 ngoài các toán tử số khác. (Đóng góp bởi Mark Dickinson trong bpo-36669. )

xml

Để giảm thiểu DTD và truy xuất thực thể bên ngoài, các mô-đun và không còn xử lý các thực thể bên ngoài theo mặc định. (Đóng góp bởi Christian Heimes trong bpo-17239. )

Các phương thức

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
91 trong mô-đun hỗ trợ các tìm kiếm ký tự đại diện như
[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
93 bỏ qua không gian tên và
[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
94 trả về tất cả các thẻ trong không gian tên đã cho. (Đóng góp bởi Stefan Behnel trong bpo-28238. )

Mô-đun cung cấp chức năng mới

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
96 thực hiện C14N 2. 0. (Đóng góp bởi Stefan Behnel trong bpo-13611. )

Đối tượng đích của có thể nhận các sự kiện khai báo không gian tên thông qua các phương thức gọi lại mới

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
98 và
[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
99. Ngoài ra, mục tiêu có thể được định cấu hình để xử lý các sự kiện về nhận xét và hướng dẫn xử lý để đưa chúng vào cây được tạo. (Đóng góp bởi Stefan Behnel trong bpo-36676 và bpo-36673. )

xmlrpc

hiện hỗ trợ đối số từ khóa tiêu đề tùy chọn cho chuỗi tiêu đề HTTP được gửi với mỗi yêu cầu. Trong số những thứ khác, điều này cho phép nâng cấp từ xác thực cơ bản mặc định lên xác thực phiên nhanh hơn. (Đóng góp bởi Cédric Krier trong bpo-35153. )

tối ưu hóa

  • Mô-đun hiện có thể sử dụng chức năng này trong một số trường hợp để có hiệu suất tốt hơn. Hiện tại, nó chỉ được sử dụng trên macOS và Linux (dùng glibc 2. 24 hoặc mới hơn) nếu tất cả các điều kiện này được đáp ứng

    • close_fds là sai;

    • tham số preexec_fn, pass_fds, cwd và start_new_session không được thiết lập;

    • đường dẫn thực thi chứa một thư mục

    (Đóng góp bởi Joannah Nanjekye và Victor Stinner trong bpo-35537. )

  • , , và sử dụng lệnh gọi tòa nhà “sao chép nhanh” dành riêng cho nền tảng trên Linux và macOS để sao chép tệp hiệu quả hơn. “sao chép nhanh” có nghĩa là hoạt động sao chép xảy ra trong nhân, tránh việc sử dụng bộ đệm không gian người dùng trong Python như trong “_______109”. Trên Windows sử dụng kích thước bộ đệm mặc định lớn hơn (1 MiB thay vì 16 KiB) và biến thể dựa trên - của được sử dụng. Tốc độ sao chép tệp 512 MiB trong cùng một phân vùng là khoảng +26% trên Linux, +50% trên macOS và +40% trên Windows. Ngoài ra, tiêu thụ ít chu kỳ CPU hơn nhiều. xem phần. (Đóng góp bởi Giampaolo Rodolà trong bpo-33671. )

  • sử dụng chức năng và tất cả các chức năng sao chép tùy thuộc vào nó sử dụng các giá trị được lưu trong bộ nhớ cache. Tốc độ sao chép một thư mục có 8000 tệp là khoảng +9% trên Linux, +20% trên Windows và +30% trên chia sẻ Windows SMB. Ngoài ra, số lượng cuộc gọi tòa nhà cũng giảm 38%, đặc biệt nhanh hơn trên các hệ thống tệp mạng. (Đóng góp bởi Giampaolo Rodolà trong bpo-33695. )

  • Giao thức mặc định trong mô-đun hiện là Giao thức 4, được giới thiệu lần đầu trong Python 3. 4. Nó cung cấp hiệu suất tốt hơn và kích thước nhỏ hơn so với Giao thức 3 có sẵn kể từ Python 3. 0

  • Đã xóa một thành viên khỏi

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    20. Tất cả các đối tượng được theo dõi bởi GC (e. g. kích thước tuple, list, dict) giảm 4 hoặc 8 byte. (Đóng góp bởi Inada Naoki trong bpo-33597. )

  • hiện sử dụng

    # Loop over fixed length blocks
    while (block := f.read(256)) != '':
        process(block)
    
    38 để giảm dung lượng bộ nhớ của nó. (Đóng góp bởi Wouter Bolsterlee và Tal Einat trong bpo-30977)

  • Cải thiện hiệu suất 33%. Xử lý đối số được tối ưu hóa và thêm một đường dẫn nhanh cho trường hợp phổ biến của một chỉ mục số nguyên không âm duy nhất vào một bộ (là trường hợp sử dụng điển hình trong thư viện chuẩn). (Đóng góp bởi Raymond Hettinger trong bpo-35664. )

  • Tra cứu trường tăng tốc trong. Bây giờ chúng nhanh hơn gấp hai lần, khiến chúng trở thành dạng tra cứu biến thể hiện nhanh nhất trong Python. (Được đóng góp bởi Raymond Hettinger, Pablo Galindo, và Joe Jevnik, Serhiy Storchaka trong bpo-32492. )

  • Hàm tạo không phân bổ tổng thể bộ đệm mục bên trong nếu đầu vào có thể lặp lại có độ dài đã biết (đầu vào thực hiện

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    26). Điều này làm cho danh sách được tạo trung bình nhỏ hơn 12%. (Đóng góp bởi Raymond Hettinger và Pablo Galindo trong bpo-33234. )

  • Nhân đôi tốc độ ghi biến lớp. Khi một thuộc tính non-dunder được cập nhật, sẽ có một cuộc gọi không cần thiết để cập nhật các vị trí. (Được đóng góp bởi Stefan Behnel, Pablo Galindo Salgado, Raymond Hettinger, Neil Schemenauer và Serhiy Storchaka trong bpo-36012. )

  • Giảm chi phí chuyển đổi đối số được truyền cho nhiều hàm và phương thức dựng sẵn. Điều này tăng tốc độ gọi một số hàm và phương thức dựng sẵn đơn giản lên tới 20–50%. (Đóng góp bởi Serhiy Storchaka trong bpo-23867, bpo-35582 và bpo-36127. )

  • Hướng dẫn

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    27 hiện sử dụng cơ chế “bộ nhớ cache trên mỗi opcode” mới. Bây giờ nhanh hơn khoảng 40%. (Đóng góp bởi Yury Selivanov và Inada Naoki trong bpo-26219. )

Thay đổi API xây dựng và C

  • Mặc định trở thành một chuỗi rỗng. cờ

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    29 cho pymalloc trở nên vô dụng (các bản dựng có và không có pymalloc đều tương thích với ABI) và do đó đã bị xóa. (Đóng góp bởi Victor Stinner trong bpo-36707. )

    Ví dụ về những thay đổi

    • Chỉ chương trình

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      30 được cài đặt, chương trình
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      31 đã biến mất

    • Chỉ có tập lệnh

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      32 được cài đặt, tập lệnh
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      33 đã biến mất

    • Cờ

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      29 đã bị xóa khỏi hậu tố của tên tệp thư viện động. các mô-đun mở rộng trong thư viện tiêu chuẩn cũng như các mô-đun được sản xuất và cài đặt bởi các gói của bên thứ ba, chẳng hạn như các mô-đun được tải xuống từ PyPI. Ví dụ, trên Linux, Python 3. 7 hậu tố
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      35 trở thành
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      36 trong Python 3. 8

  • Các tệp tiêu đề đã được sắp xếp lại để phân tách tốt hơn các loại API khác nhau

    • def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      37 phải là API C ổn định công cộng di động

    • def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      38 phải là API C không ổn định dành riêng cho CPython;

    • def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      41 là API C nội bộ riêng rất đặc trưng cho CPython. API này không đi kèm với bảo hành tương thích ngược và không được sử dụng bên ngoài CPython. Nó chỉ được hiển thị cho các nhu cầu rất cụ thể như trình gỡ lỗi và cấu hình phải truy cập vào các phần bên trong CPython mà không cần gọi các chức năng. API này hiện được cài đặt bởi
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      42

    (Đóng góp bởi Victor Stinner trong bpo-35134 và bpo-35081, công việc do Eric Snow khởi xướng trong Python 3. 7. )

  • Một số macro đã được chuyển đổi thành các hàm nội tuyến tĩnh. các loại tham số và loại trả về được xác định rõ ràng, chúng không có vấn đề cụ thể đối với macro, các biến có phạm vi cục bộ. ví dụ

    • ,

    • ,

    • def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      47,
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      48

    • chức năng riêng tư.

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      49,
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      50,
      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      51

    (Đóng góp bởi Victor Stinner trong bpo-35059. )

  • Hàm

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    52 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    53 đã bị xóa. Họ không làm gì kể từ Python 2. 7. 4 và Trăn 3. 2. 0, đã bị loại trừ khỏi API hạn chế (ABI ổn định) và không được ghi lại. (Đóng góp bởi Victor Stinner trong bpo-35713. )

  • Kết quả của

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    54 bây giờ là loại
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    55 thay vì
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    56. (Đóng góp bởi Serhiy Storchaka trong bpo-33818. )

  • Tính hai mặt của

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    57 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    58 đã bị loại bỏ. Trước đây, khi cập nhật cây nguồn CPython, người ta phải sao chép thủ công
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    57 (bên trong cây nguồn) sang
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    58 (bên trong cây xây dựng) để phản ánh mọi thay đổi ngược dòng. Đây là một lợi ích nhỏ đối với các nhà đóng gói nhưng lại gây khó chịu thường xuyên cho các nhà phát triển sau quá trình phát triển CPython, vì việc quên sao chép tệp có thể gây ra lỗi xây dựng

    Bây giờ hệ thống xây dựng luôn đọc từ

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    58 bên trong cây nguồn. Những người muốn tùy chỉnh tệp đó được khuyến khích duy trì các thay đổi của họ trong git fork của CPython hoặc dưới dạng các tệp vá, như họ sẽ làm đối với bất kỳ thay đổi nào khác đối với cây nguồn

    (Đóng góp bởi Antoine Pitrou trong bpo-32430. )

  • Các hàm chuyển đổi số Python thành số nguyên C và các hàm phân tích cú pháp đối số như với các đơn vị định dạng chuyển đổi số nguyên như

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    64 giờ đây sẽ sử dụng phương thức đặc biệt thay vì , nếu có. Cảnh báo không dùng nữa sẽ được phát ra đối với các đối tượng có phương thức
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    39 nhưng không có phương thức
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    38 (như và ). bây giờ sẽ trả lại
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    72 cho các đối tượng triển khai
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    38. , và bây giờ cũng sử dụng phương pháp
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    38 nếu có. (Đóng góp bởi Serhiy Storchaka trong bpo-36048 và bpo-20092. )

  • Các đối tượng loại được cấp phát theo đống giờ đây sẽ tăng số lượng tham chiếu của chúng trong (và macro song song của nó là

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    79) thay vì trong. Các loại sửa đổi phân bổ cá thể hoặc phân bổ có thể cần phải được điều chỉnh. (Đóng góp bởi Eddie Elizondo trong bpo-35810. )

  • Hàm mới cho phép tạo các đối tượng mã như , nhưng có thêm tham số posonlyargcount để chỉ ra số lượng đối số chỉ vị trí. (Đóng góp bởi Pablo Galindo trong bpo-37221. )

  • bây giờ đặt thành đường dẫn đầy đủ của chương trình () thay vì tên chương trình (). (Đóng góp bởi Victor Stinner trong bpo-38234. )

không dùng nữa

  • Lệnh distutils

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    87 hiện không được dùng nữa, thay vào đó hãy sử dụng
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    88 (gói bánh xe). (Đóng góp bởi Victor Stinner trong bpo-37481. )

  • Các phương pháp không dùng nữa

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    89 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    90 trong mô-đun hiện phát ra thay vì. Chúng sẽ bị xóa trong Python 3. 9. (Đóng góp bởi Serhiy Storchaka trong bpo-29209. )

  • Truyền một đối tượng không phải là phiên bản to không được dùng nữa và sẽ bị cấm trong Python 3. 9. (Đóng góp bởi Elvis Pranskevichus trong bpo-34075. )

  • Các phương thức

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    96 của , và đã không được dùng nữa

    Việc triển khai các phương thức này đã bỏ qua tham số chỉ mục của chúng và thay vào đó trả về mục tiếp theo. (Đóng góp bởi Berker Peksag trong bpo-9372. )

  • Lớp không dùng thuộc tính

    f(10, 20, 30, d=40, e=50, f=60)
    
    01 để thay thế bằng thuộc tính
    f(10, 20, 30, d=40, e=50, f=60)
    
    02 có cùng thông tin. (Đóng góp bởi Raymond Hettinger trong bpo-36320. )

  • các lớp

    f(10, 20, 30, d=40, e=50, f=60)
    
    04,
    f(10, 20, 30, d=40, e=50, f=60)
    
    05,
    f(10, 20, 30, d=40, e=50, f=60)
    
    06,
    f(10, 20, 30, d=40, e=50, f=60)
    
    07 và
    f(10, 20, 30, d=40, e=50, f=60)
    
    08 được coi là không dùng nữa và sẽ bị xóa trong các phiên bản Python trong tương lai. nên được sử dụng thay thế. (Đóng góp bởi Serhiy Storchaka trong bpo-32892. )

  • các phương thức

    f(10, 20, 30, d=40, e=50, f=60)
    
    11,
    f(10, 20, 30, d=40, e=50, f=60)
    
    12,
    f(10, 20, 30, d=40, e=50, f=60)
    
    13,
    f(10, 20, 30, d=40, e=50, f=60)
    
    14 và
    f(10, 20, 30, d=40, e=50, f=60)
    
    15 hiện không được dùng nữa và sẽ không được gọi trong các phiên bản Python trong tương lai. Thêm phương thức
    f(10, 20, 30, d=40, e=50, f=60)
    
    16 để xử lý tất cả các nút không đổi. (Đóng góp bởi Serhiy Storchaka trong bpo-36917. )

  • f(10, 20, 30, d=40, e=50, f=60)
    
    17 không được dùng nữa và sẽ bị xóa trong phiên bản 3. 10. Thay vì
    f(10, 20, 30, d=40, e=50, f=60)
    
    18, hãy sử dụng thay thế. (Đóng góp bởi Andrew Svetlov trong bpo-36921. )

  • Trong , việc truyền rõ ràng đối số vòng lặp không được dùng nữa và sẽ bị xóa trong phiên bản 3. 10 cho những điều sau đây. , , , , , , , , , , , , , , và

  • Việc chuyển rõ ràng các đối tượng coroutine sang không được dùng nữa và sẽ bị xóa trong phiên bản 3. 11. (Đóng góp bởi Yury Selivanov trong bpo-34790. )

  • Các hàm và phương thức sau không được dùng trong mô-đun. ________ 938, ________ 939, ________ 940 và ________ 941. Chúng trả về các byte được mã hóa và có thể bạn sẽ nhận được các ngoại lệ không mong muốn liên quan đến Unicode nếu có sự cố mã hóa với các chuỗi đã dịch. Tốt hơn hết là sử dụng các lựa chọn thay thế trả về chuỗi Unicode trong Python 3. Các chức năng này đã bị hỏng trong một thời gian dài

    Hàm

    f(10, 20, 30, d=40, e=50, f=60)
    
    42, các phương thức
    f(10, 20, 30, d=40, e=50, f=60)
    
    43 và
    f(10, 20, 30, d=40, e=50, f=60)
    
    44, tham số bộ mã của các hàm và cũng không được dùng nữa vì chúng chỉ được sử dụng cho các hàm
    f(10, 20, 30, d=40, e=50, f=60)
    
    47. (Đóng góp bởi Serhiy Storchaka trong bpo-33710. )

  • Phương thức

    f(10, 20, 30, d=40, e=50, f=60)
    
    48 của không được dùng nữa. (Đóng góp bởi Dong-hee Na trong bpo-35283. )

  • Nhiều hàm dựng sẵn và hàm mở rộng nhận các đối số số nguyên giờ đây sẽ phát ra cảnh báo không dùng nữa cho s, s và bất kỳ đối tượng nào khác có thể được chuyển đổi thành số nguyên chỉ khi bị mất (e. g. có phương pháp nhưng không có phương pháp). Trong phiên bản tương lai, chúng sẽ bị lỗi. (Đóng góp bởi Serhiy Storchaka trong bpo-36048. )

  • Không dùng nữa việc chuyển các đối số sau dưới dạng đối số từ khóa

    • func trong , , ,

      f(10, 20, 30, d=40, e=50, f=60)
      
      57, và

    • chức năng trong

    • fn trong phương pháp của và

    • gọi lại trong ,

      f(10, 20, 30, d=40, e=50, f=60)
      
      66 và

    • c và typeid theo phương pháp

      f(10, 20, 30, d=40, e=50, f=60)
      
      68 của
      f(10, 20, 30, d=40, e=50, f=60)
      
      69 và
      f(10, 20, 30, d=40, e=50, f=60)
      
      70

    • obj trong

    Trong các bản phát hành Python trong tương lai, chúng sẽ. (Đóng góp bởi Serhiy Storchaka trong bpo-36492. )

Loại bỏ API và tính năng

Các tính năng và API sau đã bị xóa khỏi Python 3. 8

  • Bắt đầu với Python 3. 3, việc nhập ABC từ không được dùng nữa và việc nhập phải được thực hiện từ. Có thể nhập từ các bộ sưu tập đã được đánh dấu để xóa trong 3. 8, nhưng đã bị trì hoãn đến 3. 9. (Xem bpo-36952. )

  • Mô-đun

    f(10, 20, 30, d=40, e=50, f=60)
    
    74, không được dùng trong Python 3. 7, đã bị xóa. (Đóng góp bởi Victor Stinner trong bpo-35471. )

  • Hàm

    f(10, 20, 30, d=40, e=50, f=60)
    
    75 đã bị xóa, sau khi không được dùng nữa kể từ Python 3. 3. sử dụng thay thế. (Đóng góp bởi Victor Stinner trong bpo-35345. )

  • Hàm

    f(10, 20, 30, d=40, e=50, f=60)
    
    77 đã bị xóa, sau khi không được dùng nữa kể từ Python 3. 3. sử dụng hoặc thay vào đó, tùy thuộc vào yêu cầu của bạn, để có hành vi được xác định rõ. (Đóng góp bởi Matthias Bussonnier trong bpo-36895. )

  • Tập lệnh

    f(10, 20, 30, d=40, e=50, f=60)
    
    80 đã bị xóa để thay thế cho
    f(10, 20, 30, d=40, e=50, f=60)
    
    81 để giúp loại bỏ sự nhầm lẫn về trình thông dịch Python mà tập lệnh
    f(10, 20, 30, d=40, e=50, f=60)
    
    80 được liên kết với. (Đóng góp bởi Brett Cannon trong bpo-25427. )

  • f(10, 20, 30, d=40, e=50, f=60)
    
    83,
    f(10, 20, 30, d=40, e=50, f=60)
    
    84 và
    f(10, 20, 30, d=40, e=50, f=60)
    
    85 bị xóa khỏi mô-đun. Chúng không được dùng nữa trong Python 3. 2 tuổi trở lên. Thay vào đó, chúng nên được nhập từ các mô-đun
    f(10, 20, 30, d=40, e=50, f=60)
    
    87 và
    f(10, 20, 30, d=40, e=50, f=60)
    
    88

  • Hàm

    f(10, 20, 30, d=40, e=50, f=60)
    
    89 bị xóa khỏi mô-đun. Nó không được ghi lại và không dùng nữa kể từ Python 3. 3

  • Hàm tạo không còn chấp nhận đối số html. Nó không bao giờ có tác dụng và không được dùng nữa trong Python 3. 4. Tất cả các thông số khác bây giờ. (Đóng góp bởi Serhiy Storchaka trong bpo-29209. )

  • Đã xóa phương pháp

    f(10, 20, 30, d=40, e=50, f=60)
    
    92 của. (Đóng góp bởi Serhiy Storchaka trong bpo-29209. )

  • bộ giải mã "unicode_internal" đã bị xóa. (Đóng góp bởi Inada Naoki trong bpo-36297. )

  • Các đối tượng

    f(10, 20, 30, d=40, e=50, f=60)
    
    94 và
    f(10, 20, 30, d=40, e=50, f=60)
    
    95 của mô-đun không được hiển thị cho người dùng. (Đóng góp bởi Aviv Palivoda trong bpo-30262. )

  • Đối số từ khóa

    f(10, 20, 30, d=40, e=50, f=60)
    
    97 của and which đã bị bỏ qua và không dùng nữa kể từ Python 3. 6 đã được gỡ bỏ. bpo-36952 (Đóng góp bởi Matthias Bussonnier. )

  • Các hàm

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    000 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    001 không dùng nữa trong Python 3. 7 đã được gỡ bỏ; . )

Chuyển sang Python 3. 8

Phần này liệt kê các thay đổi được mô tả trước đây và các bản sửa lỗi khác có thể yêu cầu thay đổi mã của bạn

Thay đổi trong hành vi Python

  • Các biểu thức lợi nhuận (cả hai mệnh đề

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    46 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    003) hiện không được phép trong các biểu thức hiểu và trình tạo (ngoài biểu thức có thể lặp lại trong mệnh đề
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    004 ngoài cùng bên trái). (Đóng góp bởi Serhiy Storchaka trong bpo-10544. )

  • Trình biên dịch hiện tạo ra một kiểm tra danh tính khi (

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    006 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    007) được sử dụng với một số loại chữ nhất định (e. g. chuỗi, số). Chúng thường có thể hoạt động một cách tình cờ trong CPython, nhưng không được đảm bảo bởi thông số ngôn ngữ. Cảnh báo khuyên người dùng nên sử dụng các bài kiểm tra đẳng thức (
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    008 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    009) để thay thế. (Đóng góp bởi Serhiy Storchaka trong bpo-34850. )

  • Trình thông dịch CPython có thể nuốt ngoại lệ trong một số trường hợp. Trong Trăn 3. 8 điều này xảy ra trong ít trường hợp hơn. Đặc biệt, các ngoại lệ được nêu ra khi lấy thuộc tính từ từ điển loại không còn bị bỏ qua. (Đóng góp bởi Serhiy Storchaka trong bpo-35459. )

  • Đã xóa các triển khai

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    010 khỏi các loại dựng sẵn , , và một số lớp khỏi thư viện chuẩn. Bây giờ họ kế thừa
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    015 từ. Kết quả là, việc định nghĩa phương thức
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    017 trong lớp con của các lớp này sẽ ảnh hưởng đến biểu diễn chuỗi của chúng. (Đóng góp bởi Serhiy Storchaka trong bpo-36793. )

  • Trên AIX, không chứa phiên bản chính nữa. Nó luôn là

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    019, thay vì
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    020.
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    021. Vì các phiên bản Python cũ hơn bao gồm số phiên bản, do đó, bạn nên luôn sử dụng
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    022. (Đóng góp bởi M. Cảm thấy trong bpo-36588. )

  • và bây giờ kết thúc luồng hiện tại nếu được gọi trong khi trình thông dịch đang hoàn thiện, làm cho chúng nhất quán với , và. Nếu hành vi này không được mong muốn, hãy bảo vệ cuộc gọi bằng cách kiểm tra

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    028 hoặc
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    029. (Đóng góp bởi Joannah Nanjekye trong bpo-36475. )

Các thay đổi trong API Python

  • Hàm hiện sử dụng mã hóa UTF-8 trên Windows, thay vì trang mã ANSI. xem PEP 529 để biết lý do. Chức năng này không còn được dùng nữa trên Windows. (Đóng góp bởi Victor Stinner trong bpo-37412. )

  • bây giờ có thể sử dụng trong một số trường hợp để có hiệu suất tốt hơn. Trên Hệ thống con Windows dành cho Linux và Mô phỏng người dùng QEMU, hàm tạo

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    033 sử dụng không còn đưa ra ngoại lệ đối với các lỗi như “chương trình bị thiếu”. Thay vào đó, tiến trình con không thành công với giá trị khác 0
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    035. (Đóng góp bởi Joannah Nanjekye và Victor Stinner trong bpo-35537. )

  • Đối số preexec_fn của * không còn tương thích với trình thông dịch con. Việc sử dụng tham số trong trình thông dịch con hiện làm tăng. (Đóng góp bởi Eric Snow trong bpo-34651, được Christian Heimes sửa đổi trong bpo-37951. )

  • Phương thức

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    038 không còn âm thầm bỏ qua các ngoại lệ tùy ý. (Đóng góp bởi Victor Stinner trong bpo-36348. )

  • Hàm

    f(10, 20, 30, d=40, e=50, f=60)
    
    75 đã bị xóa, sau khi không được dùng nữa kể từ Python 3. 3. sử dụng thay thế. (Đóng góp bởi Victor Stinner trong bpo-35345. )

  • Hàm không còn đưa ra ngoại lệ khi được cung cấp dữ liệu đa phương thức. Thay vào đó, nó trả về chế độ đầu tiên gặp phải trong dữ liệu đầu vào. (Đóng góp bởi Raymond Hettinger trong bpo-35892. )

  • Phương thức của lớp không còn nhận đối số. Sử dụng nó với các đối số để thay đổi lựa chọn không được dùng trong Python 3. 6. Sử dụng các phương pháp chuyên dụng như để thay đổi lựa chọn. (Đóng góp bởi Serhiy Storchaka trong bpo-31508. )

  • Các phương thức

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    045,
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    046 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    047 của và phương thức
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    049 của
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    050, hiện giữ nguyên thứ tự thuộc tính do người dùng chỉ định. (Đóng góp bởi Diego Rojas và Raymond Hettinger trong bpo-34160. )

  • Cơ sở dữ liệu được mở bằng cờ

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    052 hiện ở chế độ chỉ đọc. với các cờ
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    052 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    055 không còn tạo cơ sở dữ liệu nếu nó không tồn tại. (Đóng góp bởi Serhiy Storchaka trong bpo-32749. )

  • Phương thức

    f(10, 20, 30, d=40, e=50, f=60)
    
    92 được định nghĩa trong lớp con của will không còn được gọi nữa và sẽ phát ra a thay vì a. Xác định phương thức trên mục tiêu để xử lý khai báo loại tài liệu XML. (Đóng góp bởi Serhiy Storchaka trong bpo-29209. )

  • A hiện được nâng lên khi siêu dữ liệu tùy chỉnh không cung cấp mục nhập

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    062 trong không gian tên được chuyển đến
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    063. A đã được phát ra trong Python 3. 6–3. 7. (Đóng góp bởi Serhiy Storchaka trong bpo-23722. )

  • Lớp

    # Loop over fixed length blocks
    while (block := f.read(256)) != '':
        process(block)
    
    16 hiện có thể được sử dụng làm trình quản lý ngữ cảnh. (Đóng góp bởi Scott Sanderson trong bpo-29235. )

  • , , và sử dụng các tòa nhà chọc trời “sao chép nhanh” dành riêng cho nền tảng (xem phần)

  • kích thước bộ đệm mặc định trên Windows đã được thay đổi từ 16 KiB thành 1 MiB

  • Cấu trúc

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    20 đã thay đổi hoàn toàn. Tất cả mã đã chạm vào thành viên cấu trúc phải được viết lại. (Xem bpo-33597. )

  • Cấu trúc đã được chuyển vào các tệp tiêu đề “nội bộ” (cụ thể là Bao gồm/nội bộ/pycore_pystate. h). Một

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    073 không rõ ràng vẫn có sẵn như một phần của API công khai (và ABI ổn định). Các tài liệu chỉ ra rằng không có trường nào của cấu trúc là công khai, vì vậy chúng tôi hy vọng không có ai sử dụng chúng. Tuy nhiên, nếu bạn dựa vào một hoặc nhiều trường riêng tư đó và không có lựa chọn nào khác thì vui lòng mở vấn đề BPO. Chúng tôi sẽ làm việc để giúp bạn điều chỉnh (có thể bao gồm thêm các chức năng của trình truy cập vào API công khai). (Xem bpo-35886. )

  • Phương thức hiện trả về

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    02 khi thành công và đưa ra một ngoại lệ về lỗi trong tất cả các nền tảng. Trước đây, hành vi của nó phụ thuộc vào nền tảng. một giá trị khác không được trả về khi thành công; . Giá trị 0 được trả về khi thành công; . (Đóng góp bởi Berker Peksag trong bpo-2122. )

  • và các mô-đun không còn xử lý các thực thể bên ngoài theo mặc định. (Đóng góp bởi Christian Heimes trong bpo-17239. )

  • Việc xóa khóa khỏi cơ sở dữ liệu chỉ đọc (, hoặc ) sẽ tăng

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    083 (, hoặc ) thay vì. (Đóng góp bởi Xiang Zhang trong bpo-33106. )

  • AST đơn giản hóa cho chữ. Tất cả các hằng số sẽ được biểu diễn dưới dạng thể hiện. Khởi tạo các lớp cũ

    f(10, 20, 30, d=40, e=50, f=60)
    
    04,
    f(10, 20, 30, d=40, e=50, f=60)
    
    05,
    f(10, 20, 30, d=40, e=50, f=60)
    
    06,
    f(10, 20, 30, d=40, e=50, f=60)
    
    07 và
    f(10, 20, 30, d=40, e=50, f=60)
    
    08 sẽ trả về một thể hiện của
    f(10, 20, 30, d=40, e=50, f=60)
    
    09. (Đóng góp bởi Serhiy Storchaka trong bpo-32892. )

  • trên Windows hiện ưu tiên biến môi trường

    # Loop over fixed length blocks
    while (block := f.read(256)) != '':
        process(block)
    
    91 và không sử dụng
    # Loop over fixed length blocks
    while (block := f.read(256)) != '':
        process(block)
    
    92, biến này thường không được đặt cho tài khoản người dùng thông thường. (Đóng góp bởi Anthony Sottile trong bpo-36264. )

  • Ngoại lệ bây giờ kế thừa từ thay vì và không còn kế thừa từ. (Đóng góp bởi Yury Selivanov trong bpo-32528. )

  • Chức năng hiện đang chờ hủy bỏ một cách chính xác khi sử dụng một phiên bản của. Trước đây, khi hết thời gian chờ, nó đã bị hủy và ngay lập tức được trả lại. (Đóng góp bởi Elvis Pranskevichus trong bpo-32751. )

  • Hàm hiện trả về một đối tượng ổ cắm an toàn để sử dụng khi 'ổ cắm' được chuyển đến tham số tên. (Đóng góp bởi Yury Selivanov trong bpo-37027. )

  • đã chuyển sang API ổn định

  • Phụ thuộc DLL cho các mô-đun mở rộng và DLL được tải trên Windows hiện được giải quyết an toàn hơn. Chỉ các đường dẫn hệ thống, thư mục chứa tệp DLL hoặc PYD và các thư mục được thêm vào mới được tìm kiếm phụ thuộc thời gian tải. Cụ thể,

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    108 và thư mục làm việc hiện tại không còn được sử dụng nữa và những sửa đổi đối với những thư mục này sẽ không còn ảnh hưởng đến độ phân giải DLL thông thường. Nếu ứng dụng của bạn dựa trên các cơ chế này, bạn nên kiểm tra và nếu nó tồn tại, hãy sử dụng nó để thêm thư mục DLL của bạn trong khi tải thư viện của bạn. Lưu ý rằng người dùng Windows 7 sẽ cần đảm bảo rằng Windows Update KB2533623 đã được cài đặt (điều này cũng được trình cài đặt xác minh). (Đóng góp bởi Steve Dower trong bpo-36085. )

  • Các tệp tiêu đề và chức năng liên quan đến pgen đã bị xóa sau khi thay thế nó bằng triển khai Python thuần túy. (Đóng góp bởi Pablo Galindo trong bpo-36623. )

  • có một tham số mới ở vị trí thứ hai của hàm tạo (posonlyargcount) để hỗ trợ các đối số chỉ vị trí được xác định trong PEP 570. Đối số đầu tiên (argcount) hiện đại diện cho tổng số đối số vị trí (bao gồm cả đối số chỉ vị trí). Phương pháp

    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    58 mới của có thể được sử dụng để làm cho mã có thể sử dụng được trong tương lai

  • Tham số

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    113 không còn sử dụng thông báo MD5 theo mặc định

Những thay đổi trong API C

  • Cấu trúc có trường cf_feature_version mới. Nó nên được khởi tạo thành

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    116. Trường bị bỏ qua theo mặc định và được sử dụng khi và chỉ khi cờ
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    117 được đặt trong cf_flags. (Đóng góp bởi Guido van Rossum trong bpo-35766. )

  • Hàm

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    118 đã bị xóa khỏi API C. Nó không nên được gọi một cách rõ ràng. sử dụng thay thế. (Đóng góp bởi Victor Stinner trong bpo-36728. )

  • Trên Unix, các tiện ích mở rộng của C không còn được liên kết với libpython ngoại trừ trên Android và Cygwin. Khi Python được nhúng, không được tải

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    120 cùng với
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    121 mà thay vào đó là
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    122. Trước đây, khi sử dụng
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    121, không thể tải các tiện ích mở rộng C không được liên kết với
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    120, giống như các tiện ích mở rộng C của thư viện chuẩn được xây dựng bởi phần
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    125 của
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    58. (Đóng góp bởi Victor Stinner trong bpo-21536. )

  • Sử dụng các biến thể của định dạng

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    127 trong phân tích cú pháp hoặc xây dựng giá trị (e. g. , , , vân vân. ) không có
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    131 xác định tăng
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    92 ngay bây giờ. Nó sẽ được gỡ bỏ trong 3. 10 hoặc 4. 0. Đọc để biết chi tiết. (Đóng góp bởi Inada Naoki trong bpo-36381. )

  • Các thể hiện của các loại được cấp phát trong heap (chẳng hạn như các loại được tạo bằng ) giữ một tham chiếu đến đối tượng loại của chúng. Việc tăng số lượng tham chiếu của các đối tượng loại này đã được chuyển từ các hàm cấp thấp hơn và

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    47. Điều này làm cho các loại được tạo thông qua hoạt động giống như các lớp khác trong mã được quản lý

    không bị ảnh hưởng

    Đối với phần lớn các trường hợp, sẽ không có tác dụng phụ. Tuy nhiên, các loại tăng số lượng tham chiếu theo cách thủ công sau khi phân bổ một phiên bản (có lẽ để khắc phục lỗi) giờ đây có thể trở thành bất tử. Để tránh điều này, các lớp này cần gọi Py_DECREF trên đối tượng loại trong quá trình phân bổ cá thể

    Để chuyển chính xác các loại này thành 3. 8, vui lòng áp dụng các thay đổi sau

    • Xóa trên đối tượng loại sau khi phân bổ một thể hiện - nếu có. Điều này có thể xảy ra sau khi gọi , , , hoặc bất kỳ trình phân bổ tùy chỉnh nào khác sử dụng hoặc

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      47

      Ví dụ

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      1

    • Đảm bảo rằng tất cả các hàm

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      145 tùy chỉnh của các loại được phân bổ theo đống sẽ giảm số lượng tham chiếu của loại

      Ví dụ

      def f(a, b, /, c, d, *, e, f):
          print(a, b, c, d, e, f)
      
      2

    (Đóng góp bởi Eddie Elizondo trong bpo-35810. )

  • Macro đã được triển khai cho MSVC. Macro bây giờ phải được đặt trước tên biểu tượng

    Ví dụ

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    3

    (Đóng góp bởi Zackery Spytz trong bpo-33407. )

  • Trình thông dịch không giả vờ hỗ trợ khả năng tương thích nhị phân của các loại tiện ích mở rộng trên các bản phát hành tính năng nữa. Một mô-đun mở rộng của bên thứ ba được xuất được cho là có tất cả các vị trí được mong đợi trong phiên bản Python hiện tại, bao gồm (không được kiểm tra nữa trước khi đọc)

    (Đóng góp bởi Antoine Pitrou trong bpo-32388. )

  • Các hàm

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    151 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    152 hiện chấp nhận thêm hai đối số
    discount = 0.0
    if (mo := re.search(r'(\d+)% discount', advertisement)):
        discount = float(mo.group(1)) / 100.0
    
    29 end_lineno và end_col_offset

  • Tệp

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    154 để cho phép các công cụ MinGW liên kết trực tiếp với
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    155 không còn được bao gồm trong bản phân phối Windows thông thường. Nếu bạn yêu cầu tệp này, nó có thể được tạo bằng công cụ
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    156 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    157, là một phần của gói binutils MinGW

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    4

    Vị trí của một

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    158 đã cài đặt sẽ phụ thuộc vào các tùy chọn cài đặt cũng như phiên bản và ngôn ngữ của Windows. Xem để biết thêm thông tin. Thư viện kết quả phải được đặt trong cùng thư mục với
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    159, thường là thư mục
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    160 trong bản cài đặt Python của bạn

    (Đóng góp bởi Steve Dower trong bpo-37351. )

Thay đổi mã byte CPython

  • Vòng lặp thông dịch đã được đơn giản hóa bằng cách di chuyển logic hủy kiểm soát chồng khối vào trình biên dịch. Trình biên dịch hiện phát ra các hướng dẫn rõ ràng để điều chỉnh chồng giá trị và gọi mã dọn dẹp cho , và

    Đã xóa opcodes

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    164,
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    165,
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    166 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    167. Đã thêm opcodes mới
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    168,
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    169,
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    170 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    171. Thay đổi hành vi của
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    172 và
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    173

    (Đóng góp bởi Mark Shannon, Antoine Pitrou và Serhiy Storchaka trong bpo-17611. )

  • Đã thêm opcode mới để xử lý các ngoại lệ được đưa ra khi chờ mục tiếp theo trong một vòng lặp. (Đóng góp bởi Serhiy Storchaka trong bpo-33041. )

  • Bây giờ mong đợi giá trị là phần tử đầu tiên trong ngăn xếp và khóa là phần tử thứ hai. Thay đổi này được thực hiện để khóa luôn được đánh giá trước giá trị trong cách hiểu từ điển, theo đề xuất của PEP 572. (Đóng góp bởi Jörn Heissler trong bpo-35224. )

Trình diễn và Công cụ

Đã thêm một tập lệnh điểm chuẩn để định thời gian theo nhiều cách khác nhau để truy cập các biến.

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
177. (Đóng góp bởi Raymond Hettinger trong bpo-35884. )

Dưới đây là tóm tắt về các cải tiến hiệu suất kể từ Python 3. 3

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
5

Điểm chuẩn được đo trên bộ xử lý Intel® Core™ i7-4960HQ chạy bản dựng macOS 64-bit có tại python. tổ chức. Tập lệnh điểm chuẩn hiển thị thời gian tính bằng nano giây

Những thay đổi đáng chú ý trong Python 3. 8. 1

Do những lo ngại đáng kể về bảo mật, thông sốReuse_address của không còn được hỗ trợ. Điều này là do hành vi của tùy chọn ổ cắm

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
179 trong UDP. Để biết thêm chi tiết, hãy xem tài liệu về
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
180. (Đóng góp bởi Kyle Stanley, Antoine Pitrou, và Yury Selivanov trong bpo-37228. )

Những thay đổi đáng chú ý trong Python 3. 8. 8

Các phiên bản Python trước đó cho phép sử dụng cả

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
181 và
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
182 làm dấu tách tham số truy vấn trong và. Do những lo ngại về bảo mật và để phù hợp với các khuyến nghị mới hơn của W3C, điều này đã được thay đổi để chỉ cho phép một khóa phân tách duy nhất, với _____1182 làm mặc định. Thay đổi này cũng ảnh hưởng và khi họ sử dụng các chức năng bị ảnh hưởng trong nội bộ. Để biết thêm chi tiết, vui lòng xem tài liệu tương ứng của họ. (Đóng góp bởi Adam Goldschmidt, Senthil Kumaran và Ken Jin trong bpo-42967. )

Những thay đổi đáng chú ý trong Python 3. 8. 12

Bắt đầu với Python 3. 8. 12 mô-đun không còn chấp nhận bất kỳ số 0 đứng đầu nào trong chuỗi địa chỉ IPv4. Các số 0 ở đầu không rõ ràng và được một số thư viện hiểu là ký hiệu bát phân. Ví dụ: hàm kế thừa coi các số 0 đứng đầu là ký hiệu bát phân. triển khai glibc của hiện đại không chấp nhận bất kỳ số 0 đứng đầu nào

Có thể sử dụng Python để quản trị hệ thống không?

Python là một trong những ngôn ngữ phát triển phổ biến nhất; . it's used frequently by sysadmins, data scientists, back-end software developers, and web developers.

Quản trị viên hệ thống có yêu cầu viết mã không?

Quản trị hệ thống không nhất thiết phải viết mã . Nó liên quan đến việc quản lý hoàn toàn môi trường máy tính. Tuy nhiên, các quản trị viên hệ thống đôi khi có thể phải viết mã để giúp các kỹ sư hoặc nhà phát triển phần mềm.

Quản trị hệ thống có khó không?

Trở thành quản trị viên hệ thống có dễ không? . it is generally not very difficult to become a system administrator if computer sciences interest you.

Tại sao Python thường được sử dụng để quản trị hệ thống từ xa?

Ưu điểm lớn nhất của Python đối với các tác vụ quản trị hệ thống là với tư cách là một ngôn ngữ lập trình đầy đủ, thật dễ dàng để di chuyển những gì bắt đầu như một tập lệnh đơn giản thành một ứng dụng đầy đủ.