Năng suất từ trong php
Trình tạo cung cấp một cách dễ dàng để triển khai các trình vòng lặp đơn giản mà không cần chi phí hoặc độ phức tạp của việc triển khai một lớp triển khai giao diện Iterator Trình tạo cho phép bạn viết mã sử dụng foreach để lặp lại một tập hợp dữ liệu mà không cần tạo mảng trong bộ nhớ, điều này có thể khiến bạn vượt quá giới hạn bộ nhớ hoặc yêu cầu một lượng thời gian xử lý đáng kể để tạo. Thay vào đó, bạn có thể viết một hàm tạo, giống như một hàm thông thường, ngoại trừ việc thay vì trả về một lần, một trình tạo có thể tạo ra nhiều lần nếu cần để cung cấp các giá trị được lặp lại Một ví dụ đơn giản về điều này là triển khai lại hàm range() dưới dạng trình tạo. Hàm phạm vi () tiêu chuẩn phải tạo một mảng với mọi giá trị trong đó và trả về nó, điều này có thể dẫn đến các mảng lớn. ví dụ: phạm vi gọi (0, 1000000) sẽ dẫn đến hơn 100 MB bộ nhớ được sử dụng Thay vào đó, chúng ta có thể triển khai trình tạo 0, chỉ cần đủ bộ nhớ để tạo đối tượng Iterator và theo dõi trạng thái hiện tại của trình tạo bên trong, hóa ra là dưới 1 kilobyteVí dụ #1 Triển khai phạm vi () làm trình tạo 1 2 3 4 5Có thể bạn quan tâm 6Ví dụ trên sẽ xuất ra Single digit odd numbers from range(): 1 3 5 7 9 Single digit odd numbers from xrange(): 1 3 5 7 9 Khi một hàm tạo được gọi, một đối tượng mới của lớp Trình tạo bên trong được trả về. Đối tượng này triển khai giao diện Iterator theo cách giống như đối tượng iterator chỉ chuyển tiếp và cung cấp các phương thức có thể được gọi để thao tác trạng thái của trình tạo, bao gồm gửi giá trị đến và trả về giá trị từ nó Từ khóa 7 được sử dụng để tạo hàm tạo. Các hàm tạo hoạt động như các trình vòng lặp có thể được lặp lại bằng vòng lặp 8Từ khóa 7 cung cấp từng giá trị từ một trình lặp mỗi khi hàm tạo được gọi cho đến khi không còn mục nào trong trình lặp, sau đó trình tạo sẽ chuyển sang từ khóa 0 tiếp theoYield is a function Generator giống như một hàm bình thường, ngoại trừ việc thay vì trả về một giá trị, Generator sẽ mang lại nhiều giá trị như nó cần. Nhìn vào ví dụ sau để dễ hiểu nhé Nội dung chính Hiển thị
Tất nhiên, đây không phải là cách nó hoạt động, ví dụ trước sẽ cho bạn một lỗi nghiêm trọng. Unable to convert objects of the layer Trình tạo thành chuỗi, chúng ta hãy làm rõ hơn bên dưới đây Khác nhau giữa yield và returnLỗi trước có nghĩa là hàm getValues() không trả về một chuỗi như mong đợi, chúng ta hãy kiểm tra kiểu của nó
Lớp Generator triển khai giao diện Iterator, có nghĩa là bạn phải lặp qua hàm getValue () để có được các giá trị
Nhưng đây không phải là sự khác biệt duy nhất Trình tạo cho phép bạn viết mã sử dụng foreach để lặp lại một tập hợp dữ liệu mà không cần xây dựng một mảng trong bộ nhớ, điều này có thể khiến bạn vượt quá giới hạn bộ nhớ. Quá tốt nếu bạn đang cần sử dụng loop lồng nhau rồi Trong ví dụ sau, chúng tôi sẽ xây dựng một mảng bao gồm 800. 000 phần tử và trả về nó từ hàm getValues() , và trong khi đó, chúng ta sẽ lấy bộ nhớ được phân bổ cho tập lệnh này bằng cách sử dụng hàm memory_get_usage() , chúng ta sẽ sử dụng bộ nhớ sau mỗi 200. 000 phần tử được thêm vào, có nghĩa là chúng ta sẽ đặt bốn điểm kiểm tra
Điều xảy ra trong ví dụ trước là việc tiêu thụ bộ nhớ và đầu ra của lệnh này không
Điều đó có nghĩa là tập lệnh vài dòng của chúng tôi đã tiêu thụ hơn 30 Megabyte bộ nhớ (Ôi trời ơi), mỗi khi bạn thêm một phần tử vào mảng $valueArray, bạn sẽ tăng kích thước của nó trong bộ nhớ. Chương trình càng lặp nhiều thì càng dễ crash nhé. Giờ hãy cùng LPTech thử với Yield xem thế nào
Đầu ra của kịch bản này đáng ngạc nhiên đến cả LPTech cũng giật mình
Điều đó không có nghĩa là bạn chuyển từ biểu thức trả về thành năng suất, nhưng nếu bạn đang xây dựng các mảng lớn trong ứng dụng của mình, điều này gây ra các vấn đề về bộ nhớ trên máy chủ, thì năng suất sẽ phù hợp với option of Yield is what ?Có nhiều lựa chọn cho năng suất, tôi sẽ làm nổi bật một vài trong số chúng Sử dụng năng suất, bạn cũng có thể sử dụng trở lại;________số 8Trả về khóa-giá trị
Kết luậnLý do chính của chủ đề này của LPTech là để làm rõ sự khác biệt giữa năng suất và trả lại đặc biệt về bộ nhớ, hiển thị một số ví dụ vì tôi thấy nó thực sự quan trọng đối với bất kỳ lập trình viên nào đang đi. . |
Bài Viết Liên Quan
Hướng dẫn can we have 2 keys in dictionary python? - chúng ta có thể có 2 khóa trong từ điển python không?
Trong hướng dẫn Python này, chúng tôi sẽ thảo luận về nhiều khóa từ điển Python. Ở đây chúng tôi cũng sẽ bao gồm các ví dụ dưới đây:Python dictionary ...
Hướng dẫn is macbook pro m1 good for python programming? - macbook pro m1 có tốt cho lập trình python không?
Tôi đã tìm ra một giải pháp giải pháp - Cách cài đặt Numpy trên M1 Max, với hiệu suất tăng tốc nhất (Apples Veclib)? Đây là câu trả lời kể từ ngày 6 tháng ...
Hướng dẫn is javascript a glue language? - javascript có phải là ngôn ngữ keo không?
Ngôn ngữ keo được sử dụng ở khắp mọi nơi. Mặc dù bạn có thể xác định là Pythonista, hoặc Lua Fiend, hoặc một nhà phát triển C ++, tất cả chúng ta cuối ...
Hướng dẫn python typing none - python gõ không có
Trong Python, không có vô giá trị từ khóa, nhưng có Không có. Không có giá trị trả về của hàm doesn’t return anything. None is often used to represent the absence of a ...
Hướng dẫn python removesuffix - python removeuffix
Xem thảo luậnCải thiện bài viếtLưu bài viếtĐọcBàn luậnXem thảo luậnCải thiện bài viếtLưu bài viếtĐọcstr.removesuffix(suffix, /) function removes the suffix ...
Chụp màn hình samsung j6 2023
. Camera kép chụp ảnh xóa phông theo xu thế. Thiết kế của Samsung Galaxy J6 có tạo được ấn tượng?. Camera đủ mạnh, dễ dàng sử dụng. Những lý do bạn nên ...
Hướng dẫn web scraping load more button python - web cạo tải thêm nút python
from selenium import webdriver import time driver = ...
Hướng dẫn deletion distance python - xóa khoảng cách python
Tôi đã giải quyết vấn đề này tại Pramp và tôi gặp khó khăn trong việc tìm ra thuật toán cho vấn đề này.Nội phân Chính showShowMã ví dụLàm thế nào để ...
Hướng dẫn can we use return in if statement python? - chúng ta có thể sử dụng lệnh return trong if python không?
Giả sử tôi có một tuyên bố if với if(A > B): return A+1 else: return A-1 0. Từ góc độ hiệu quả, tôi nên sử dụngif(A > B): return A+1 return A-1 hoặcif(A > ...
Hướng dẫn what is late static binding in php for? - liên kết tĩnh trễ trong php để làm gì?
Chính xác thì các ràng buộc tĩnh muộn trong PHP là gì? Mark Amery133K78 Huy hiệu vàng395 Huy hiệu bạc444 Huy hiệu đồng78 gold badges395 silver badges444 bronze badges Đã ...
Hướng dẫn how to fetch data from database in php using mysqli - làm thế nào để tìm nạp dữ liệu từ cơ sở dữ liệu trong php bằng cách sử dụng mysqli
❮ Php mysqli tham khảoVí dụ - Phong cách định hướng đối tượngTìm nạp các hàng từ một kết quả đã đặt:?> Nhìn vào ví dụ về phong cách thủ tục ở phía ...
Hướng dẫn input two numbers and display the largest number in python - nhập hai số và hiển thị số lớn nhất trong python
Chương trình Python để tìm thấy lớn nhất trong số hai sốChúng tôi có nhiều cách tiếp cận để có được con số lớn nhất trong số hai số, và ở đây chúng ...
Xe máy lấn tuyến phạt bao nhiêu tiền 2023
Trả lời: Vụ Pháp chế - Bộ GTVT trả lời như sau: Theo quy định tại Điều 24 Nghị định số 34/2010/NĐ-CP ngày 02/4/2010 của Chính phủ quy định xử phạt vi ...
Hướng dẫn node js change html content - nút js thay đổi nội dung html
Bạn không thể sửa đổi từ phía nút theo cách mà tôi nghĩ rằng bạn đang cố gắng làm. Bạn có thể gửi lại phản hồi cho phía máy khách và trên phản hồi ...
Hướng dẫn dùng numeral definition python - sử dụng python định nghĩa số
Kiểu dữ liệu Number trong Python lưu trữ các giá trị số. Chúng là các kiểu dữ liệu immutable, hay là kiểu dữ liệu không thay đổi, nghĩa là các thay đổi về ...
Hướng dẫn php mysqli export to csv - php mysqli xuất sang csv
Tôi đã cố gắng trong nhiều ngày để xuất từ một truy vấn một số giá trị trong .csv với mysqli, nhưng tôi có vấn đề khi xuất, mọi thứ đang xuất ...
Hướng dẫn can you have logic in css? - bạn có thể có logic trong css?
Gói lênCSS rất có khả năng làm thay đổi các hệ thống bố trí thông minh và phản ứng. Các cấu trúc và thuật toán kiểm soát của nó có thể hơi kỳ lạ so ...
Hướng dẫn how check string is english or not in php? - làm thế nào để kiểm tra chuỗi là tiếng anh hay không trong php?
Trong JS tôi đã sử dụng mã này:if(string.match(/[^A-Za-z0-9]+/)) Nhưng tôi không biết, làm thế nào để làm điều đó trong PHP. Benmorel32,8K48 Huy hiệu vàng173 Huy hiệu ...
Hướng dẫn dùng ord meaning python
Nội dung chínhNội dung chính ShowSắp xếp dictionary python theo thứ tự tăng dần | hàm sorted()Sắp xếp theo key | phương thức keys()Sắp xếp theo value | phương thức ...
Hướng dẫn date of birth validation in php - xác thực ngày sinh trong php
Demo: Ví dụ làm việc.Php ngày của tập lệnh xác minh sinhĐịnh dạng ngày xác thựcKiểm tra giới hạn tuổi bằng cách so sánh ngàyTính toán tuổi của bạnKiểm ...