Thay thế cho vòng lặp trong python

Đã bao giờ bạn tự hỏi tại sao một thứ đơn giản như vòng lặp For lại là quá đủ để giải quyết một vấn đề, nhưng chúng tôi bắt gặp một cách tiếp cận hoàn toàn khác và một đoạn mã phức tạp để triển khai nó. Điều này xảy ra với tôi mọi lúc và điều đó khiến tôi nghĩ tại sao một lập trình viên phải trải qua thời gian dài như vậy để thực hiện nó

Tất nhiên, mỗi lập trình viên có một cách tiếp cận logic khác nhau đối với một vấn đề và có rất nhiều suy nghĩ và cân nhắc trong quá trình triển khai, điều này gây tò mò hơn và đôi khi thách thức để hiểu lý do logic đằng sau những triển khai đó

Ảnh của Tine Ivanič trên Bapt

Như đã nói, trong bài viết này, chúng ta sẽ khám phá một trường hợp sử dụng đơn giản và sẽ thực hiện các cách tiếp cận triển khai khác nhau cho cùng một vấn đề và hy vọng các lập trình viên sẽ suy luận ra cơ sở hợp lý trong việc triển khai một cách tiếp cận thay thế.

“Hầu hết hiệu quả của các vòng lặp quyết định hiệu quả của ứng dụng”

Xem xét ví dụ dưới đây chứa danh sách ứng dụng và tình trạng sức khỏe tương ứng của chúng. Chúng tôi phải phân tích cú pháp dữ liệu và nếu bất kỳ ứng dụng nào có trạng thái lỗi [Trạng thái không bằng 200] thì sẽ kích hoạt bản dựng cho hành động lỗi

app_health = [
{
"app_name": "tintin",
"status": 200
},
{
"app_name": "tintin_services",
"status": 400
},
{
"app_name": "tintin_db",
"status": 400
}
]

Cách tiếp cận “vòng lặp For” đơn giản

Hãy triển khai bằng cách sử dụng vòng lặp for để lặp qua phần tử của danh sách và kiểm tra trạng thái của từng ứng dụng để tìm lỗi [Trạng thái không bằng 200 hoặc 201]. Khi chúng ta quan tâm đến câu lệnh break xảy ra lỗi đầu tiên được sử dụng để thoát khỏi vòng lặp for

for items in app_health:
if items.get["status"] not in [200, 201]:
""" Trigger action for application failure"""
print["{}.Application is down".format[items.get["app_name"]]]
break

Giải pháp hoạt động hoàn toàn tốt, vì nó lặp lại qua từng phần tử và xác định lần đầu tiên xảy ra lỗi ứng dụng và kích hoạt hành động thích hợp cho lỗi ứng dụng, Trong trường hợp này, chúng tôi đang in tên của ứng dụng bị lỗi. Đầu ra của mã trên và việc sử dụng bộ nhớ được hiển thị bên dưới

tintin_services.Application is down
-----------------------
| Memory Usage |13.9MB|
-----------------------
Phương pháp hiểu danh sách

Các giải pháp trên chỉ hoạt động tốt, Vì chúng tôi đang thực hiện việc này trong Python, nên cần có cách triển khai Pythonic. Danh sách hiểu đó là. Theo cách tiếp cận này, chúng tôi sẽ lặp lại từng phần tử trong danh sách “app_health” và trả về danh sách lỗi ứng dụng

print[["{}.Application is down".format[items.get["app_name"]]
for items in app_health if items.get["status"] not in [200, 201]]]

Các kết quả đầu ra của đoạn mã trên được trình bày dưới đây. Cách tiếp cận này thay vì trả về lần xuất hiện đầu tiên, nó đã trả về tất cả các lần xuất hiện lỗi và chúng tôi có thể kích hoạt lỗi ứng dụng trong trường hợp danh sách trả về có giá trị [độ dài của danh sách lớn hơn 0]

Mặc dù không có bất kỳ sự khác biệt đáng chú ý nào trong việc sử dụng bộ nhớ, sự suy giảm hiệu suất rất có thể xảy ra trên quy mô lớn

Phương pháp tiếp cận trình vòng lặp
['tintin_services.Application is down', 'tintin_db.Application is down']
------------------------
| Memory Usage |13.86MB|
------------------------
Python - Tiếp theo []

Hãy tinh chỉnh các giải pháp toàn diện trong danh sách trên để chỉ trả về lần xuất hiện lỗi đầu tiên. Làm thế nào để đạt được điều này?

print[next["{}.Application is down".format[items.get["app_name"]]
for items in app_health if items.get["status"] not in [200, 201]]]

đánh giá lười biếng hoặc gọi theo nhu cầu là một chiến lược đánh giá trì hoãn việc đánh giá một biểu thức cho đến khi cần giá trị của nó [đánh giá không nghiêm ngặt] và cũng tránh đánh giá lặp lại. Việc chia sẻ có thể giảm thời gian chạy của một số chức năng nhất định theo hệ số mũ so với các chiến lược đánh giá không nghiêm ngặt khác — With Love Wiki

Vì vậy, bằng cách triển khai hàm next[] lặp qua danh sách, “app_health” sẽ lặp cho đến khi tìm thấy lần xuất hiện đầu tiên và lợi thế lớn nhất là các vòng lặp sẽ không thực thi cho đến khi hàm next[] được gọi lại. [lười đánh giá]

Đầu ra và mức sử dụng bộ nhớ của đoạn mã trên được trình bày bên dưới. Chúng ta sẽ có thể thấy sự cải thiện đáng kể về hiệu suất với sự gia tăng kích thước của đầu vào

tintin_services.Application is down
-----------------------
| Memory Usage |13.89MB|
-----------------------
Tóm tắt

Vẻ ngoài có thể đánh lừa đôi khi những thứ tưởng chừng đơn giản lại không hề đơn giản như vậy. Luôn tìm kiếm một phương pháp thay thế có thể hoạt động tốt hơn trên quy mô lớn - Hy vọng chúng ta có một số lý do tại sao lập trình viên thích các tùy chọn khác hơn là một phương pháp tiêu chuẩn. Xét cho cùng, lập trình viên chúng ta không điên như vẻ ngoài của nó [Một lần nữa vẻ ngoài có thể đánh lừa]

Rất ít phương pháp thay thế để xem xét, có thể được sử dụng thay cho việc triển khai các vòng lặp cổ điển

  • hàm bậc cao. [Đó là một chủ đề cho một ngày khác] — Hàm bậc cao hơn lấy một hoặc nhiều hàm làm đối số và trả về một hàm
print[list[filter[lambda x: x.get["status"] not in [200, 201], app_health]]]
  • Các hàm đệ quy— Một hàm gọi chính nó có tính chất đệ quy. Điều này chúng ta có thể sử dụng khi một vấn đề phức tạp có thể được giải quyết bằng cách lặp lại một vấn đề nhỏ hơn, nhưng hãy lưu ý đến sự phức tạp về thời gian
  • Trình tạo & Trình lặp — Trình tạo là hàm trả về một trình vòng lặp, thay vì đánh giá thực tế của câu lệnh

Chúc bạn đọc vui vẻ…Cho đến lần sau

Một ghi chú từ tiếng Anh thuần túy

Bạn có biết rằng chúng tôi đã ra mắt một kênh YouTube không? . Hãy xem chúng tôi bằng cách nhấp vào đây và nhớ đăng ký kênh nhé 😎

Sự thay thế cho vòng lặp là gì?

Sử dụng map[] thay vì vòng lặp for[].

Bản đồ có nhanh hơn vòng lặp for Python không?

Vì map[] được viết bằng C và được tối ưu hóa cao nên vòng lặp ngụ ý bên trong của nó có thể hiệu quả hơn vòng lặp for Python thông thường . Đây là một lợi thế của việc sử dụng map[]. Ưu điểm thứ hai của việc sử dụng map[] liên quan đến mức tiêu thụ bộ nhớ. Với vòng lặp for, bạn cần lưu trữ toàn bộ danh sách trong bộ nhớ hệ thống của mình.

3 loại vòng lặp trong Python là gì?

Loại vòng lặp .
cho vòng lặp. Vòng lặp for trong Python được sử dụng để lặp qua một chuỗi [danh sách, bộ dữ liệu, bộ, từ điển và chuỗi]. Sơ đồ. .
Trong khi lặp lại. Vòng lặp while được sử dụng để thực thi một tập hợp các câu lệnh miễn là một điều kiện là đúng. .
Vòng lặp lồng nhau. Nếu một vòng lặp tồn tại bên trong phần thân của một vòng lặp khác, nó được gọi là vòng lặp lồng nhau

Cái nào nhanh hơn vòng lặp for?

Hiểu danh sách nhanh hơn vòng lặp for để tạo danh sách. Tuy nhiên, điều này là do chúng tôi đang tạo danh sách bằng cách thêm các phần tử mới vào danh sách đó ở mỗi lần lặp lại.

Chủ Đề