Python giảm độ dài danh sách
1 của Python là một hàm thực hiện một kỹ thuật toán học gọi là gấp hoặc rút gọn. 1 rất hữu ích khi bạn cần áp dụng một chức năng cho một lần lặp và giảm nó thành một giá trị tích lũy duy nhất. 1 của Python phổ biến đối với các nhà phát triển có nền tảng lập trình chức năng, nhưng Python còn cung cấp nhiều hơn thế Show
Trong hướng dẫn này, bạn sẽ đề cập đến cách thức hoạt động của 1 và cách sử dụng nó một cách hiệu quả. Bạn cũng sẽ đề cập đến một số công cụ Python thay thế có thể giống Pythonic hơn, dễ đọc hơn và hiệu quả hơn 1Trong hướng dẫn này, bạn sẽ học
Với kiến thức này, bạn sẽ có thể quyết định nên sử dụng công cụ nào khi giải quyết các vấn đề về giảm hoặc gấp trong Python Để hiểu rõ hơn về 1 của Python, sẽ rất hữu ích nếu bạn có một số kiến thức trước đó về cách làm việc với các lần lặp Python, đặc biệt là cách lặp qua chúng bằng vòng lặp 9Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn Khám phá lập trình chức năng trong PythonLập trình chức năng là một mô hình lập trình dựa trên việc chia nhỏ một vấn đề thành một tập hợp các chức năng riêng lẻ. Lý tưởng nhất là mọi chức năng chỉ nhận một tập hợp các đối số đầu vào và tạo ra một đầu ra Trong lập trình hàm, các hàm không có bất kỳ trạng thái bên trong nào ảnh hưởng đến đầu ra mà chúng tạo ra cho một đầu vào nhất định. Điều này có nghĩa là bất cứ khi nào bạn gọi một hàm có cùng một nhóm đối số đầu vào, bạn sẽ nhận được kết quả hoặc đầu ra giống nhau Trong một chương trình chức năng, dữ liệu đầu vào chảy qua một tập hợp các chức năng. Mỗi chức năng hoạt động trên đầu vào của nó và tạo ra một số đầu ra. Lập trình hàm cố gắng tránh các kiểu dữ liệu có thể thay đổi và thay đổi trạng thái càng nhiều càng tốt. Nó hoạt động với dữ liệu chảy giữa các chức năng Các tính năng cốt lõi khác của lập trình chức năng bao gồm những điều sau đây
Có một số khái niệm quan trọng trong danh sách này. Đây là một cái nhìn sâu hơn về một số trong số họ
Vì Python là ngôn ngữ lập trình đa mô hình nên nó cung cấp một số công cụ hỗ trợ phong cách lập trình chức năng
Mặc dù Python không bị ảnh hưởng nhiều bởi các ngôn ngữ lập trình hàm, nhưng vào năm 1993, đã có nhu cầu rõ ràng về một số tính năng lập trình hàm được liệt kê ở trên Đáp lại, một số công cụ chức năng đã được thêm vào ngôn ngữ. Theo Guido van Rossum, chúng được đóng góp bởi một thành viên cộng đồng
Trong những năm qua, các tính năng mới như khả năng hiểu danh sách, biểu thức trình tạo và các hàm tích hợp như 6, 90, 91, 9 và 8 được xem là sự thay thế Pythonic cho 3, 4 và 1. Guido đã lên kế hoạch xóa 3, 4, 1 và thậm chí 0 khỏi ngôn ngữ trong Python 3May mắn thay, việc loại bỏ này không có hiệu lực, chủ yếu là do cộng đồng Python không muốn từ bỏ các tính năng phổ biến như vậy. Chúng vẫn tồn tại và vẫn được sử dụng rộng rãi trong số các nhà phát triển có nền tảng lập trình chức năng vững chắc Trong hướng dẫn này, bạn sẽ trình bày cách sử dụng 1 của Python để xử lý các lần lặp và giảm chúng thành một giá trị tích lũy duy nhất mà không cần sử dụng vòng lặp 9. Bạn cũng sẽ tìm hiểu về một số công cụ Python mà bạn có thể sử dụng thay cho 1 để làm cho mã của bạn Pythonic, dễ đọc và hiệu quả hơnLoại bỏ các quảng cáoBắt đầu với >>> from functools import reduce >>> numbers = [0, 1, 2, 3, 4] >>> reduce(my_add, numbers) 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 1 của Python 1 của Python thực hiện một kỹ thuật toán học thường được gọi là gấp hoặc rút gọn. Bạn đang thực hiện thao tác gấp hoặc rút gọn khi giảm danh sách các mục thành một giá trị tích lũy duy nhất. Python's 1 hoạt động trên bất kỳ lần lặp nào — không chỉ danh sách — và thực hiện các bước sau
Ý tưởng đằng sau 1 của Python là lấy một hàm hiện có, áp dụng tích lũy nó cho tất cả các mục trong một lần lặp và tạo một giá trị cuối cùng duy nhất. Nói chung, 1 của Python thuận tiện cho việc xử lý các lần lặp mà không cần viết các vòng lặp 9 rõ ràng. Vì 1 được viết bằng C, vòng lặp bên trong của nó có thể nhanh hơn vòng lặp Python 9 rõ ràng 1 của Python ban đầu là một chức năng tích hợp sẵn (và vẫn còn trong Python 2. x), nhưng nó đã được chuyển sang 90 trong Python 3. 0. Quyết định này dựa trên một số vấn đề về khả năng đọc và hiệu suất có thể xảy raMột lý do khác để chuyển 1 sang 1 là việc giới thiệu các hàm tích hợp như 6, 8, 9, 91, 90 và 7, cung cấp các cách hiệu quả hơn, dễ đọc hơn và Pythonic để giải quyết các trường hợp sử dụng phổ biến cho 1. Bạn sẽ học cách sử dụng chúng thay thế cho 1 ở phần sau của hướng dẫnTrong Trăn 3. x, nếu bạn cần sử dụng 1, thì trước tiên bạn phải nhập hàm vào phạm vi hiện tại của mình bằng cách sử dụng câu lệnh 102 theo một trong các cách sau
Theo tài liệu cho 1, chức năng có chữ ký sau 7Tài liệu Python cũng nói rằng 1 gần tương đương với hàm Python sau 1Giống như hàm Python này, 1 hoạt động bằng cách áp dụng hàm hai đối số cho các mục của 110 trong một vòng lặp từ trái sang phải, cuối cùng giảm 110 thành một 112 tích lũy duy nhấtPython's 1 cũng chấp nhận đối số thứ ba và tùy chọn có tên là 114 cung cấp giá trị gốc cho phép tính hoặc phép rút gọnTrong hai phần tiếp theo, bạn sẽ tìm hiểu sâu về cách hoạt động của 1 của Python và ý nghĩa đằng sau mỗi đối số của nóCác đối số cần thiết. >>> from functools import reduce >>> numbers = [0, 1, 2, 3, 4] >>> reduce(my_add, numbers) 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 116 và >>> from functools import reduce >>> numbers = [0, 1, 2, 3, 4] >>> reduce(my_add, numbers) 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 110Đối số đầu tiên của hàm 1 của Python là một hàm hai đối số được gọi một cách thuận tiện là 116. Hàm này sẽ được áp dụng cho các mục trong một lần lặp để tính lũy tích một giá trị cuối cùngMặc dù tài liệu chính thức đề cập đến đối số đầu tiên của 1 là “một hàm của hai đối số”, nhưng bạn có thể chuyển bất kỳ hàm nào có thể gọi được bằng Python cho 1 miễn là hàm có thể gọi được chấp nhận hai đối số. Các đối tượng có thể gọi được bao gồm các lớp, các thể hiện triển khai một phương thức đặc biệt có tên là 122, các phương thức thể hiện, phương thức lớp, phương thức tĩnh và hàmGhi chú. Để biết thêm chi tiết về các đối tượng có thể gọi được trong Python, bạn có thể xem tài liệu về Python và cuộn xuống phần “Các loại có thể gọi được. ” Đối số bắt buộc thứ hai, 110, sẽ chấp nhận mọi khả năng lặp lại của Python, như tên gọi của nó. Điều này bao gồm danh sách, bộ dữ liệu, đối tượng 124, trình tạo, trình lặp, bộ, khóa và giá trị từ điển và bất kỳ đối tượng Python nào khác mà bạn có thể lặp lạiGhi chú. Nếu bạn chuyển một trình vòng lặp tới 1 của Python, thì hàm sẽ cần sử dụng hết trình vòng lặp trước khi bạn có thể nhận được giá trị cuối cùng. Vì vậy, trình lặp trong tay sẽ không còn lười biếngĐể hiểu cách hoạt động của 1, bạn sẽ viết một hàm tính tổng của hai số và in phép toán tương đương ra màn hình. Đây là mã>>> 8Hàm này tính tổng của 127 và 128, in một thông báo với thao tác sử dụng chuỗi f và trả về kết quả tính toán. Đây là cách nó hoạt động>>> 1 129 là một hàm hai đối số, vì vậy bạn có thể chuyển nó tới 1 của Python cùng với một lần lặp để tính tổng tích lũy của các mục trong lần lặp. Kiểm tra đoạn mã sau sử dụng danh sách các số>>>
Khi bạn gọi _______ 01, chuyển _______ 6129 và _______ 6133 làm đối số, bạn sẽ nhận được kết quả hiển thị tất cả các hoạt động mà _______ 01 thực hiện để đưa ra kết quả cuối cùng là ____ 6135. Trong trường hợp này, các hoạt động tương đương với 136Cuộc gọi đến 1 trong ví dụ trên áp dụng 129 cho hai mục đầu tiên trong 133 ( 140 và 141) và nhận được kết quả là 141. Sau đó, 1 gọi 129 bằng cách sử dụng 141 và mục tiếp theo trong 133 (là 147) làm đối số, nhận được kết quả là 148. Quá trình được lặp lại cho đến khi 133 hết các mục và 1 trả về kết quả cuối cùng là 135Loại bỏ các quảng cáoĐối số tùy chọn. >>> from functools import reduce >>> numbers = [0, 1, 2, 3, 4] >>> reduce(my_add, numbers) 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 114Đối số thứ ba cho 1 của Python, được gọi là 114, là tùy chọn. Nếu bạn cung cấp một giá trị cho 114, thì 1 sẽ cung cấp giá trị đó cho lệnh gọi đầu tiên của 116 làm đối số đầu tiên của nóĐiều này có nghĩa là lệnh gọi đầu tiên đến 116 sẽ sử dụng giá trị của 114 và mục đầu tiên của 110 để thực hiện phép tính từng phần đầu tiên của nó. Sau đó, 1 tiếp tục làm việc với các mục tiếp theo của 110Đây là một ví dụ mà bạn sử dụng 129 với 114 được đặt thành 165>>>
Vì bạn cung cấp giá trị của 165 cho 114, nên 1 của Python sử dụng giá trị đó trong lần gọi đầu tiên làm đối số đầu tiên cho 129. Lưu ý rằng trong lần lặp đầu tiên, 129 sử dụng 165 và 140, là mục đầu tiên của 133, để thực hiện phép tính 174Một điểm khác cần lưu ý là, nếu bạn cung cấp một giá trị cho ________ 6114, thì 1 sẽ thực hiện thêm một lần lặp so với khi không có ________ 6114Nếu bạn dự định sử dụng 1 để xử lý các lần lặp có khả năng trống, thì bạn nên cung cấp một giá trị cho 114. 1 của Python sẽ sử dụng giá trị này làm giá trị trả về mặc định khi 110 trống. Nếu bạn không cung cấp giá trị 114, thì 1 sẽ tăng giá trị 184. Hãy xem ví dụ sau>>> 9Nếu bạn gọi 1 với một 110 trống, thì hàm sẽ trả về giá trị được cung cấp cho 114. Nếu bạn không cung cấp 114, thì 1 sẽ tăng 184 khi xử lý các lần lặp trốngGhi chú. Để tìm hiểu sâu hơn về truy nguyên Python là gì, hãy xem Tìm hiểu về Truy nguyên Python Bây giờ bạn đã quen với cách hoạt động của 1, bạn đã sẵn sàng học cách áp dụng nó vào một số vấn đề lập trình phổ biếnGiảm Iterables Với Python's >>> from functools import reduce >>> numbers = [0, 1, 2, 3, 4] >>> reduce(my_add, numbers) 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 1Cho đến giờ, bạn đã học cách hoạt động của 1 trong Python và cách sử dụng nó để giảm số lần lặp bằng hàm do người dùng xác định. Bạn cũng đã học được ý nghĩa của từng đối số đối với 1 và cách chúng hoạt độngTrong phần này, bạn sẽ xem xét một số trường hợp sử dụng phổ biến cho 1 và cách giải quyết chúng bằng hàm. Bạn cũng sẽ tìm hiểu về một số công cụ Python thay thế mà bạn có thể sử dụng thay cho 1 để làm cho mã của bạn Pythonic, hiệu quả và dễ đọc hơnTổng các giá trị số 197 của 1 của Python là trường hợp sử dụng tổng. Nó liên quan đến việc tính toán tổng tích lũy của một danh sách các số. Giả sử bạn có một danh sách các số như 199. Tổng của nó sẽ là 800. Đây là một ví dụ nhanh về cách giải quyết vấn đề này bằng vòng lặp Python 9>>> 68Vòng lặp 9 lặp qua mọi giá trị trong 133 và tích lũy chúng trong 804. Kết quả cuối cùng là tổng của tất cả các giá trị, trong ví dụ này là 135. Một biến được sử dụng như 804 trong ví dụ này đôi khi được gọi là bộ tích lũyĐây được cho là trường hợp sử dụng phổ biến nhất cho 1 của Python. Để thực hiện thao tác này với 1, bạn có một số tùy chọn. Một số trong số đó bao gồm sử dụng 1 với một trong các chức năng sau
Để sử dụng hàm do người dùng xác định, bạn cần viết mã hàm cộng hai số. Sau đó, bạn có thể sử dụng chức năng đó với 1. Đối với ví dụ này, bạn có thể viết lại 129 như sau>>> 81 129 cộng hai số, 127 và 128, rồi trả về kết quả. Với 129 tại chỗ, bạn có thể sử dụng 1 để tính tổng các giá trị trong Python iterable. Đây là cách>>> 9Cuộc gọi đến 1 áp dụng 129 cho các mục trong 133 để tính tổng tích lũy của chúng. Kết quả cuối cùng là 135, như mong đợiBạn cũng có thể thực hiện tính toán tương tự bằng cách sử dụng hàm 0. Trong trường hợp này, bạn cần một hàm 0 lấy hai số làm đối số và trả về tổng của chúng. Hãy xem ví dụ sau>>> 10Hàm 0 nhận hai đối số và trả về tổng của chúng. 1 áp dụng hàm 0 trong một vòng lặp để tính tổng tích lũy của các mục trong 133Tương tự như vậy, bạn có thể tận dụng một mô-đun Python có tên là 829. Mô-đun này xuất một loạt các hàm tương ứng với các toán tử nội tại của Python. Đối với vấn đề hiện tại, bạn có thể sử dụng 811 cùng với 1 của Python. Kiểm tra ví dụ sau>>> 11Trong ví dụ này, 832 nhận hai đối số và trả về tổng của chúng. Vì vậy, bạn có thể sử dụng 832 với 1 để tính tổng tất cả các mục của 133. Vì 832 được viết bằng C và được tối ưu hóa để đạt hiệu quả, nên đây có thể là lựa chọn tốt nhất của bạn khi sử dụng 1 để giải quyết trường hợp sử dụng tổng. Lưu ý rằng việc sử dụng 811 cũng dễ đọc hơn so với sử dụng hàm 0Trường hợp sử dụng tổng quá phổ biến trong lập trình Python, kể từ phiên bản 2. 3, đã bao gồm một chức năng tích hợp chuyên dụng, 6, để giải quyết nó. 6 được khai báo là 842 843 là đối số tùy chọn của 6 và mặc định là 140. Hàm cộng giá trị của 843 vào các mục của 110 từ trái sang phải và trả về tổng. Hãy xem ví dụ sau>>> 12Vì 6 là hàm tích hợp sẵn nên bạn không cần nhập bất cứ thứ gì. Nó luôn có sẵn cho bạn. Sử dụng 6 là cách Pythonic nhất để giải quyết trường hợp sử dụng tổng. Nó rõ ràng, dễ đọc và súc tích. Nó tuân theo một nguyên tắc cốt lõi của Python
Việc bổ sung 6 vào ngôn ngữ là một chiến thắng lớn về khả năng đọc và hiệu suất so với việc sử dụng vòng lặp 1 hoặc 9Ghi chú. Để biết thêm chi tiết về việc so sánh hiệu suất của 1 với hiệu suất của các công cụ rút gọn Python khác, hãy xem phần Hiệu suất là chìa khóaNếu bạn đang xử lý trường hợp sử dụng tổng, thì thực tiễn tốt khuyên bạn nên sử dụng 6Loại bỏ các quảng cáoNhân các giá trị sốTrường hợp sử dụng sản phẩm của 1 của Python khá giống với trường hợp sử dụng tổng, nhưng lần này hoạt động là phép nhân. Nói cách khác, bạn cần tính tích của tất cả các giá trị trong một lần lặpVí dụ: giả sử bạn có danh sách 199. Sản phẩm của nó sẽ là 857. Bạn có thể tính toán điều này bằng cách sử dụng vòng lặp Python 9. Kiểm tra ví dụ sau>>> 13Vòng lặp lặp lại các mục trong 133, nhân từng mục với kết quả của lần lặp trước đó. Trong trường hợp này, giá trị ban đầu cho bộ tích lũy 860 phải là 141 thay vì 140. Vì bất kỳ số nào nhân với 0 đều bằng 0, nên giá trị bắt đầu bằng 140 sẽ luôn làm cho sản phẩm của bạn bằng 140Tính toán này cũng là một trường hợp sử dụng khá phổ biến cho 1 của Python. Một lần nữa, bạn sẽ đề cập đến ba cách để giải quyết vấn đề. Bạn sẽ sử dụng 1 với
Đối với tùy chọn 1, bạn sẽ cần viết mã một hàm tùy chỉnh nhận hai đối số và trả về tích của chúng. Sau đó, bạn sẽ sử dụng hàm này với 1 để tính tích của các mục trong một lần lặp. Hãy xem đoạn mã sau>>> 14Hàm 870 nhân hai số, 127 và 128. Cuộc gọi đến 1 lặp lại các mục của 133 và tính tích của chúng bằng cách áp dụng 870 cho các mục kế tiếp. Kết quả cuối cùng là tích của tất cả các mục trong 133, trong ví dụ này là 877Nếu bạn muốn sử dụng hàm 0 để giải quyết trường hợp sử dụng này, thì bạn cần một hàm nhận hai đối số và trả về tích của chúng. Đây là một ví dụ>>> 15Hàm ẩn danh thực hiện điều kỳ diệu bằng cách nhân các mục liên tiếp trong khi 1 lặp lại trên 133. Một lần nữa, kết quả là tích của tất cả các mục trong 133Bạn cũng có thể sử dụng 868 để giải quyết trường hợp sử dụng sản phẩm. 868 lấy hai số và trả về kết quả của phép nhân chúng. Đây là chức năng phù hợp để giải quyết vấn đề trong tầm tay. Kiểm tra ví dụ sau>>> 16Vì 884 được tối ưu hóa cao, mã của bạn sẽ hoạt động tốt hơn nếu bạn sử dụng hàm này thay vì hàm do người dùng xác định hoặc hàm 0. Lưu ý rằng giải pháp này cũng dễ đọc hơn nhiềuCuối cùng, nếu bạn đang sử dụng Python 3. 8, thì bạn có quyền truy cập vào một giải pháp Pythonic và dễ đọc hơn cho trường hợp sử dụng này. Trăn 3. 8 đã thêm một chức năng mới có tên là 886, nằm trong mô-đun Python 887. Hàm này tương tự như hàm 6 nhưng trả về tích của một giá trị 843 nhân với một số 110Trong trường hợp của 891, đối số 843 là tùy chọn và mặc định là 141. Đây là cách nó hoạt động>>> 17Đây cũng là một chiến thắng lớn về khả năng đọc và hiệu quả so với việc sử dụng 1. Vì vậy, nếu bạn đang sử dụng Python 3. 8 và giảm sản phẩm là một hoạt động phổ biến trong mã của bạn, thì bạn sẽ được phục vụ tốt hơn bằng cách sử dụng 891 thay vì 1 của PythonLoại bỏ các quảng cáoTìm giá trị tối thiểu và tối đaVấn đề tìm giá trị tối thiểu và tối đa trong một lần lặp cũng là một vấn đề rút gọn mà bạn có thể giải quyết bằng cách sử dụng 1 của Python. Ý tưởng là so sánh các mục trong iterable để tìm giá trị tối thiểu hoặc tối đaGiả sử bạn có danh sách các số 898. Trong danh sách này, giá trị nhỏ nhất là 141 và giá trị lớn nhất là 100. Để tìm những giá trị này, bạn có thể sử dụng vòng lặp Python 9. Kiểm tra đoạn mã sau>>> 18Cả hai vòng lặp lặp lại các mục trong 102 và cập nhật giá trị của 103 hoặc 104 theo kết quả so sánh liên tiếp. Lưu ý rằng ban đầu, 103 và 104 giữ số 148, là giá trị đầu tiên trong 133. Biến 102 giữ các giá trị còn lại trong 133. Nói cách khác, 111Ghi chú. Trong các ví dụ trên, bạn sử dụng toán tử giải nén lặp lại Python ( 112) để giải nén hoặc mở rộng các giá trị trong 133 thành hai biến. Trong trường hợp đầu tiên, hiệu ứng ròng là 103 nhận giá trị đầu tiên trong 133, là 148 và 102 thu thập các giá trị còn lại trong danh sáchKiểm tra các chi tiết trong các ví dụ sau >>> 19Toán tử giải nén có thể lặp lại của Python ( 112) rất hữu ích khi bạn cần giải nén một chuỗi hoặc có thể lặp lại thành nhiều biếnĐể hiểu rõ hơn về các thao tác giải nén trong Python, bạn có thể tham khảo PEP 3132 Extended Iterable Unpacking và PEP 448 Extra Unpacking Generalizations Bây giờ, hãy nghĩ về cách bạn có thể tìm thấy giá trị tối thiểu và tối đa trong một lần lặp bằng cách sử dụng 1 của Python. Một lần nữa, bạn có thể sử dụng hàm do người dùng xác định hoặc hàm 0 tùy theo nhu cầu của bạnĐoạn mã sau triển khai một giải pháp sử dụng hai hàm khác nhau do người dùng xác định. Hàm đầu tiên sẽ nhận hai đối số, 127 và 128, đồng thời trả về giá trị nhỏ nhất của chúng. Hàm thứ hai sẽ sử dụng quy trình tương tự nhưng sẽ trả về giá trị lớn nhấtDưới đây là các hàm và cách bạn có thể sử dụng chúng với 1 của Python để tìm giá trị tối thiểu và tối đa trong một lần lặp>>> 80Khi bạn chạy 1 với 125 và 126, bạn sẽ nhận được giá trị tối thiểu và tối đa trong 133, tương ứng. 1 lặp lại các mục của 133, so sánh chúng theo cặp tích lũy và cuối cùng trả về giá trị tối thiểu hoặc tối đaGhi chú. Để triển khai 125 và 126, bạn đã sử dụng biểu thức điều kiện Python hoặc toán tử bậc ba, làm giá trị 132. Để tìm hiểu sâu hơn về biểu thức điều kiện là gì và cách chúng hoạt động, hãy xem Câu lệnh có điều kiện trong Python (if/elif/else)Bạn cũng có thể sử dụng hàm 0 để giải bài toán cực tiểu và cực đại. Hãy xem các ví dụ sau>>> 81Lần này, bạn sử dụng hai hàm 0 để tìm xem liệu ________ 6127 có nhỏ hơn hoặc lớn hơn ________ 6128 hay không. Trong trường hợp này, 1 của Python áp dụng hàm 0 cho từng giá trị trong 133, so sánh nó với kết quả của phép tính trước đó. Khi kết thúc quá trình, bạn nhận được giá trị tối thiểu hoặc tối đaVấn đề tối thiểu và tối đa phổ biến trong lập trình đến nỗi Python đã thêm các hàm tích hợp để thực hiện các phép giảm này. Các chức năng này được gọi thuận tiện là 90 và 91 và bạn không cần nhập bất kỳ thứ gì để có thể sử dụng chúng. Đây là cách họ làm việc>>> 82Khi bạn sử dụng 90 và 91 để tìm mục tối thiểu và tối đa trong một lần lặp, mã của bạn dễ đọc hơn nhiều so với việc sử dụng 1 của Python. Ngoài ra, vì 90 và 91 là các hàm C được tối ưu hóa cao, nên bạn cũng có thể nói rằng mã của mình sẽ hiệu quả hơnVì vậy, khi giải quyết vấn đề này bằng Python, tốt nhất nên sử dụng 90 và 91 thay vì 1Kiểm tra xem tất cả các giá trị có đúng khôngTrường hợp sử dụng hoàn toàn đúng của 1 của Python liên quan đến việc tìm hiểu xem tất cả các mục trong một lần lặp có đúng hay không. Để giải quyết vấn đề này, bạn có thể sử dụng 1 cùng với hàm do người dùng xác định hoặc hàm 0Bạn sẽ bắt đầu bằng cách viết mã một vòng lặp 9 để tìm hiểu xem tất cả các mục trong một lần lặp có đúng không. Đây là mã>>> 83Nếu tất cả các giá trị trong 110 là đúng, thì 155 trả về 156. Nếu không, nó sẽ trả về 157. Nó cũng trả về 156 với các lần lặp trống. 155 thực hiện đánh giá ngắn mạch. Điều này có nghĩa là hàm trả về ngay khi tìm thấy giá trị sai mà không xử lý phần còn lại của các mục trong 110Để giải quyết vấn đề này bằng cách sử dụng 1 của Python, bạn sẽ cần viết một hàm nhận hai đối số và trả về 156 nếu cả hai đối số đều đúng. Nếu một hoặc cả hai đối số là sai, thì hàm sẽ trả về 157. Đây là mã>>> 84Hàm này nhận hai đối số, 127 và 128. Sau đó, bạn sử dụng toán tử 166 để kiểm tra xem cả hai đối số có đúng không. Giá trị trả về sẽ là 156 nếu cả hai đối số đều đúng. Nếu không, nó sẽ là 157Trong Python, các đối tượng sau được coi là sai
Bất kỳ đối tượng nào khác sẽ được coi là đúng Bạn cần sử dụng 186 để chuyển đổi giá trị trả về của 166 thành 156 hoặc 157. Nếu bạn không sử dụng 186 thì hàm của bạn sẽ không hoạt động như mong đợi vì 166 trả về một trong các đối tượng trong biểu thức thay vì 156 hoặc 157. Kiểm tra các ví dụ sau>>> 85 166 trả về giá trị đầu tiên trong biểu thức nếu nó sai. Mặt khác, nó trả về giá trị cuối cùng trong biểu thức bất kể giá trị thực của nó là gì. Đó là lý do tại sao bạn cần sử dụng 186 trong trường hợp này. 186 trả về giá trị Boolean ( 156 hoặc 157) do đánh giá một biểu thức Boolean hoặc một đối tượng. Kiểm tra các ví dụ sử dụng 186>>> 86 186 sẽ luôn trả về 156 hoặc 157 sau khi đánh giá biểu thức hoặc đối tượng trong tầm tayGhi chú. Để hiểu rõ hơn về toán tử và biểu thức Python, bạn có thể xem qua Toán tử và biểu thức trong Python Bạn có thể chuyển 03 đến 1 để kiểm tra xem tất cả các mục của một lần lặp có đúng hay không. Đây là cách nó hoạt động>>> 87Nếu bạn chuyển 03 làm đối số cho 1, thì bạn sẽ nhận được 156 nếu tất cả các mục trong lần lặp là đúng. Nếu không, bạn sẽ nhận được 157Trong ví dụ thứ ba, bạn chuyển 156 đến 114 của 1 để có hành vi tương tự như 155 và để tránh 184Bạn cũng có thể sử dụng hàm 0 để giải quyết trường hợp sử dụng hoàn toàn đúng của 1. Dưới đây là một số ví dụ>>> 88Hàm 0 này khá giống với hàm 03 và sử dụng cùng một biểu thức làm giá trị trả về. Nó trả về 156 nếu cả hai đối số đều đúng. Nếu không, nó sẽ trả về 157Lưu ý rằng không giống như 155, khi bạn sử dụng 1 để giải quyết trường hợp sử dụng hoàn toàn đúng, sẽ không có đánh giá đoản mạch vì 1 không quay lại cho đến khi nó đi qua toàn bộ quá trình lặp lại. Điều này có thể thêm thời gian xử lý cho mã của bạnVí dụ: giả sử bạn có danh sách 23 và bạn cần kiểm tra xem tất cả các mục trong 24 có đúng không. Trong trường hợp này, 155 sẽ kết thúc ngay khi vòng lặp của nó xử lý cặp mục đầu tiên ( 141 và 140) vì 140 là sai. Bạn không cần phải tiếp tục lặp lại vì bạn đã có câu trả lời cho vấn đề trong tayMặt khác, giải pháp 1 sẽ không hoàn thành cho đến khi nó xử lý tất cả các mục trong 24. Đó là năm lần lặp lại sau. Bây giờ hãy tưởng tượng điều này sẽ ảnh hưởng gì đến hiệu suất mã của bạn nếu bạn đang xử lý một lần lặp lớnMay mắn thay, Python cung cấp công cụ phù hợp để giải quyết vấn đề hoàn toàn đúng theo cách Pythonic, dễ đọc và hiệu quả. chức năng tích hợp sẵn 9Bạn có thể sử dụng 32 để kiểm tra xem tất cả các mục trong 110 có đúng không. Đây là cách hoạt động của 9>>> 89 9 vòng lặp qua các mục trong một lần lặp, kiểm tra giá trị thực của từng mục. Nếu 9 tìm thấy một mục sai, thì nó sẽ trả về 157. Nếu không, nó sẽ trả về 156. Nếu bạn gọi 9 với một iterable trống, thì bạn nhận được 156 vì không có mục sai nào trong một iterable trống 9 là một hàm C được tối ưu hóa cho hiệu suất. Chức năng này cũng được thực hiện bằng cách sử dụng đánh giá ngắn mạch. Vì vậy, nếu bạn đang giải quyết vấn đề hoàn toàn đúng trong Python, thì bạn nên cân nhắc sử dụng 9 thay vì 1Loại bỏ các quảng cáoKiểm tra xem có giá trị nào là đúng khôngMột trường hợp sử dụng phổ biến khác cho 1 của Python là trường hợp sử dụng any-true. Lần này, bạn cần tìm hiểu xem ít nhất một mục trong một lần lặp có đúng không. Để giải quyết vấn đề này, bạn cần viết một hàm nhận một iterable và trả về 156 nếu bất kỳ mục nào trong iterable là true và ngược lại là 157. Hãy xem cách triển khai sau đây cho chức năng này>>> 10Nếu ít nhất một mục trong 110 là đúng, thì 48 trả về 156. Nó chỉ trả về 157 nếu tất cả các mục là sai hoặc nếu iterable trống. Hàm này cũng thực hiện đánh giá ngắn mạch vì nó trả về ngay khi tìm thấy giá trị thực, nếu cóĐể giải quyết vấn đề này bằng cách sử dụng 1 của Python, bạn cần viết mã một hàm nhận hai đối số và trả về 156 nếu ít nhất một trong số chúng là đúng. Nếu cả hai đều sai, thì hàm sẽ trả về 157Đây là một triển khai khả thi cho chức năng này >>> 11 54 trả về 156 nếu ít nhất một trong các đối số của nó là đúng. Nếu cả hai đối số đều sai, thì 54 trả về 157. Như với 03 trong phần trên, 54 sử dụng 186 để chuyển đổi kết quả của biểu thức 61 thành 156 hoặc 157Toán tử Python 64 hoạt động hơi khác so với 166. Nó trả về đối tượng thực sự đầu tiên hoặc đối tượng cuối cùng trong biểu thức. Kiểm tra các ví dụ sau>>> 12Toán tử Python 64 trả về đối tượng đúng đầu tiên hoặc, nếu cả hai đều sai, đối tượng cuối cùng. Vì vậy, bạn cũng cần sử dụng 186 để nhận giá trị trả về nhất quán từ 54Khi bạn đã có chức năng này, bạn có thể tiếp tục giảm. Hãy xem các cuộc gọi sau tới 1>>> 13Bạn đã giải quyết vấn đề bằng cách sử dụng 1 của Python. Lưu ý rằng trong ví dụ thứ ba, bạn chuyển 157 cho trình khởi tạo của 1 để tái tạo hành vi của 48 ban đầu và cũng để tránh một 184Ghi chú. Giống như các ví dụ trong phần trước, các ví dụ về 1 này không thực hiện đánh giá ngắn mạch. Điều đó có nghĩa là chúng có thể ảnh hưởng đến hiệu suất mã của bạnBạn cũng có thể sử dụng hàm 0 với 1 để giải quyết trường hợp sử dụng any-true. Đây là cách bạn có thể làm điều đó>>> 14Hàm 0 này khá giống với hàm 54. Nó trả về 156 nếu một trong hai đối số của nó là đúng. Nếu cả hai đối số đều sai, thì nó trả về 157Mặc dù giải pháp này chỉ cần một dòng mã nhưng nó vẫn có thể khiến mã của bạn không thể đọc được hoặc ít nhất là khó hiểu. Một lần nữa, Python cung cấp một công cụ để giải quyết vấn đề bất kỳ đúng một cách hiệu quả mà không cần sử dụng 1. chức năng tích hợp sẵn 8 84 lặp lại các mục trong 110, kiểm tra giá trị thực của từng mục cho đến khi tìm thấy mục thực. Hàm trả về 156 ngay khi tìm thấy giá trị thực. Nếu 8 không tìm thấy giá trị thực, thì nó trả về 157. Đây là một ví dụ>>> 15Một lần nữa, bạn không cần nhập 8 để sử dụng nó trong mã của mình. 8 hoạt động như mong đợi. Nó trả về 157 nếu tất cả các mục trong iterable là sai. Nếu không, nó sẽ trả về 156. Lưu ý rằng nếu bạn gọi 8 với một iterable trống, thì bạn nhận được 157 vì không có mục thực sự nào trong một iterable trốngNhư với 9, 8 là một hàm C được tối ưu hóa cho hiệu suất. Nó cũng được thực hiện bằng cách sử dụng đánh giá ngắn mạch. Vì vậy, nếu bạn đang giải quyết vấn đề bất kỳ trong Python, thì hãy cân nhắc sử dụng 8 thay vì 1Loại bỏ các quảng cáoSo sánh >>> from functools import reduce >>> numbers = [0, 1, 2, 3, 4] >>> reduce(my_add, numbers) 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 1 và >>> from functools import reduce >>> numbers = [0, 1, 2, 3, 4] >>> reduce(my_add, numbers, 100) 100 + 0 = 100 100 + 1 = 101 101 + 2 = 103 103 + 3 = 106 106 + 4 = 110 110 00Một hàm Python có tên là 00 tồn tại trong 2 và hoạt động tương tự như 1. 04 chấp nhận một đối số bắt buộc, 110, có thể là bất kỳ Python iterable nào. Đối số thứ hai tùy chọn, 06, cần phải là một hàm (hoặc một đối tượng có thể gọi được) nhận hai đối số và trả về một giá trị 00 trả về một iterator. Mỗi mục trong trình vòng lặp này sẽ là kết quả tích lũy của phép tính mà 06 thực hiện. Tính toán mặc định là tổng. Nếu bạn không cung cấp hàm cho 00, thì mỗi mục trong trình vòng lặp kết quả sẽ là tổng tích lũy của các mục trước đó trong 110 cộng với mục hiện cóKiểm tra các ví dụ sau >>> 16Lưu ý rằng giá trị cuối cùng trong trình vòng lặp kết quả là cùng một giá trị mà 1 trả về. Đây là điểm tương đồng chính giữa hai chức năng nàyGhi chú. Vì 00 trả về một trình vòng lặp, nên bạn cần gọi 13 để sử dụng trình vòng lặp và lấy một đối tượng danh sách làm đầu raMặt khác, nếu bạn cung cấp hàm hai đối số (hoặc có thể gọi được) cho đối số 06 của 00, thì các mục trong trình vòng lặp kết quả sẽ là kết quả tích lũy của phép tính được thực hiện bởi 06. Đây là một ví dụ sử dụng 868>>> 17Trong ví dụ này, một lần nữa bạn có thể thấy rằng mục cuối cùng trong giá trị được trả về của 00 bằng với giá trị được trả về của 1Xem xét hiệu suất và khả năng đọc 1 của Python có thể có hiệu suất rất tệ vì nó hoạt động bằng cách gọi hàm nhiều lần. Điều này có thể làm cho mã của bạn chậm và không hiệu quả. Việc sử dụng 1 cũng có thể ảnh hưởng đến khả năng đọc mã của bạn khi bạn sử dụng nó với các hàm phức tạp do người dùng xác định hoặc các hàm 0Xuyên suốt hướng dẫn này, bạn đã học được rằng Python cung cấp một loạt công cụ có thể thay thế 1 một cách duyên dáng, ít nhất là cho các trường hợp sử dụng chính của nó. Dưới đây là những điểm chính của bài đọc của bạn cho đến thời điểm này
Điểm thứ hai và thứ ba là mối quan tâm của chính Guido khi anh ấy nói như sau
Hai phần tiếp theo sẽ giúp bạn thực hiện lời khuyên chung này trong mã của bạn. Họ cũng cung cấp thêm một số lời khuyên giúp bạn sử dụng 1 của Python một cách hiệu quả khi bạn thực sự cần sử dụng nóHiệu suất là chìa khóaNếu bạn định sử dụng 1 để giải quyết các trường hợp sử dụng mà bạn đã trình bày trong hướng dẫn này, thì mã của bạn sẽ chậm hơn đáng kể so với mã sử dụng các hàm dựng sẵn chuyên dụng. Trong các ví dụ sau, bạn sẽ sử dụng 44 để đo nhanh thời gian thực thi của các đoạn mã Python nhỏ và biết được hiệu suất chung của chúng 45 có một số đối số, nhưng đối với những ví dụ này, bạn sẽ chỉ cần sử dụng các đối số sau
Hãy xem các ví dụ sau đây về trường hợp sử dụng tổng bằng cách sử dụng 1 với các công cụ khác nhau và sử dụng 6 của Python cho mục đích so sánh>>> 18Mặc dù bạn sẽ nhận được các số khác nhau tùy thuộc vào phần cứng của mình, nhưng bạn có thể sẽ nhận được phép đo thời gian tốt nhất bằng cách sử dụng 6. Hàm tích hợp này cũng là giải pháp Pythonic dễ đọc nhất cho bài toán tổngGhi chú. Để biết thêm cách tiếp cận chi tiết về cách tính thời gian cho mã của bạn, hãy xem Các hàm hẹn giờ trong Python. Ba cách để theo dõi mã của bạn Lựa chọn tốt thứ hai của bạn là sử dụng 1 với 811. Các chức năng trong 829 được viết bằng C và được tối ưu hóa cao cho hiệu suất. Vì vậy, chúng nên hoạt động tốt hơn hàm do người dùng xác định, hàm 0 hoặc vòng lặp 9Loại bỏ các quảng cáoSố lượng khả năng đọcKhả năng đọc mã cũng là một mối quan tâm quan trọng khi sử dụng 1 của Python. Mặc dù 1 nói chung sẽ hoạt động tốt hơn vòng lặp Python 9, nhưng như chính Guido đã nói, một vòng lặp Pythonic sạch sẽ thường dễ theo dõi hơn so với sử dụng 1Có gì mới trong Python 3. 0 củng cố ý tưởng này khi nói như sau
Để hiểu rõ hơn về tầm quan trọng của khả năng đọc, hãy tưởng tượng rằng bạn đang bắt đầu học Python và đang cố gắng giải một bài tập về tính tổng của tất cả các số chẵn trong một phép lặp. Nếu bạn đã biết về 1 của Python và đã thực hiện một số lập trình chức năng trong quá khứ, thì bạn có thể đưa ra giải pháp sau>>> 19Trong chức năng này, bạn sử dụng 1 để cộng dồn các số chẵn trong một lần lặp. Hàm 0 nhận hai đối số, 68 và 69, rồi trả về tổng của chúng nếu chúng chẵn. Mặt khác, nó trả về 68, giữ kết quả của tổng trước đóNgoài ra, bạn đặt 114 thành 140 vì nếu không, tổng của bạn sẽ có giá trị ban đầu là 141 (giá trị đầu tiên trong 110), đây không phải là số chẵn và sẽ gây ra lỗi cho hàm của bạnChức năng hoạt động như bạn mong đợi và bạn hài lòng với kết quả. Tuy nhiên, bạn tiếp tục đào sâu vào Python và tìm hiểu về 6 và các biểu thức trình tạo. Bạn quyết định làm lại chức năng của mình bằng các công cụ mới này và chức năng của bạn bây giờ trông như sau>>> 0Khi bạn nhìn vào mã này, bạn cảm thấy thực sự tự hào, và bạn nên. Bạn đã làm một công việc tuyệt vời. Đó là một hàm Python tuyệt đẹp gần như đọc bằng tiếng Anh đơn giản. Nó cũng hiệu quả và Pythonic. Bạn nghĩ sao? Phần kết luận 1 của Python cho phép bạn thực hiện các thao tác rút gọn trên các lần lặp bằng cách sử dụng các hàm có thể gọi Python và các hàm 0. 1 áp dụng một chức năng cho các mục trong một lần lặp và giảm chúng thành một giá trị tích lũy duy nhấtTrong hướng dẫn này, bạn đã học
Với kiến thức này, bạn sẽ có thể quyết định công cụ nào phù hợp nhất với nhu cầu mã hóa của mình khi giải quyết các vấn đề rút gọn trong Python Trong những năm qua, 1 đã được thay thế bằng nhiều công cụ Pythonic hơn như 6, 90, 91 9, 8, trong số những công cụ khác. Tuy nhiên, 1 vẫn còn đó và vẫn phổ biến trong giới lập trình viên chức năng. Nếu bạn có câu hỏi hoặc suy nghĩ về việc sử dụng 1 hoặc bất kỳ giải pháp thay thế Python nào của nó, thì hãy nhớ đăng chúng trong phần nhận xét bên dướiĐánh dấu là đã hoàn thành 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về Leodanis Pozo Ramos Leodanis là một kỹ sư công nghiệp yêu thích Python và phát triển phần mềm. Anh ấy là một nhà phát triển Python tự học với hơn 6 năm kinh nghiệm. Anh ấy là một nhà văn đam mê kỹ thuật với số lượng bài báo được xuất bản ngày càng tăng trên Real Python và các trang web khác » Tìm hiểu thêm về LeodanisMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Geir Arne Joanna Gia-cốp Mirko Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonista chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi Bạn có thể thay đổi độ dài của danh sách trong Python không?Các. phương thức mở rộng() sẽ tăng độ dài của danh sách theo số phần tử được cung cấp cho phương thức , vì vậy nếu bạn muốn thêm nhiều phần tử vào danh sách .
Bạn có thể sử dụng LEN() trong danh sách không?Hàm len() là một trong những hàm có sẵn của Python. Nó trả về chiều dài của một đối tượng. Ví dụ: nó có thể trả về số lượng mục trong danh sách . Bạn có thể sử dụng hàm với nhiều kiểu dữ liệu khác nhau. |