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
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 Hướng dẫn và Điều hướngTấ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
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ứngChươ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ự
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ậtCác tính năng mớibiểu thức gánCó 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.00 Đ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.01 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ịchCà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ànhPython 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.02 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.03 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.04 (Đó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 PythonPEP 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 PythonPEP 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
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.019 ( loại) và discount = 0.0 if (mo := re.search(r'(\d+)% discount', advertisement)): discount = float(mo.group(1)) / 100.021 ( 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.021 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ầnKhi đượ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ô-đun mới
Mô-đun cải tiếnastCá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.068 và discount = 0.0 if (mo := re.search(r'(\d+)% discount', advertisement)): discount = float(mo.group(1)) / 100.069, 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.070 và discount = 0.0 if (mo := re.search(r'(\d+)% discount', advertisement)): discount = float(mo.group(1)) / 100.071. ) 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
(Đó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.082 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.080 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.095 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.099 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 trangTí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.079, # 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ậpPhươ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ơ cBâ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. ) csvBâ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. ) ctypesTrê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ăngbâ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) gcbâ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átGiờ đâ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. ) ioTrong 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. ) itertoolsHà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. ) mmapLớ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 đườngcá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ẫncá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 chuacá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 inMô-đ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_compilehiệ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ửahiệ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ốngThê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. ) tarfileMô-đ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ỗiThê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óaMô-đ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áyMô-đun kết hợp một số tính năng mới
unicodedataMô-đ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 venvhiệ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émCá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. ) xmlrpchiệ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
Thay đổi API xây dựng và C
không dùng nữa
Loại bỏ API và tính năngCác tính năng và API sau đã bị xóa khỏi Python 3. 8
Chuyển sang Python 3. 8Phầ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 thay đổi trong API Python
Những thay đổi trong API C
Thay đổi mã byte CPython
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. 1Do 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. 8Cá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. 12Bắ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 đủ. |