Python Generatory - Z czym to się je?

แชร์
ฝัง
  • เผยแพร่เมื่อ 9 ม.ค. 2025

ความคิดเห็น • 5

  • @laponiec
    @laponiec ปีที่แล้ว +1

    Pierwszy film, ktory pokazuje praktyczne podejscie do generatorow, dziekuje Ci bardzo.

  • @norbertg.6694
    @norbertg.6694 ปีที่แล้ว

    Zajebiste poradniki robisz!

  • @Piolas83
    @Piolas83 8 หลายเดือนก่อน

    Pytanie.
    Przy generatorze nie mamy uzupełniania listy więc ten fakt powoduje nam, że pamięć faktycznie w porównaniu do pierwszej pętli z append'em nie jest tak używana. Po dodaniu listy "x" i append() do kodu z generatorem pamięć zachowuje się tak samo. Czy tu chodzi o to, że przy generatorach tworzenie listy nie ma uzasadnienia? Mógłbyś to jakoś skomentować, dzięki.

    • @KreatywnyKoder
      @KreatywnyKoder  8 หลายเดือนก่อน +1

      Odpowiem troszkę inaczej ale mam nadzieję, że wyjaśni to kiedy używać generatorów, a kiedy list.
      Generator powoli zwraca kolejną wartość, a tablica zwraca je wszystko na raz. Z generatora łatwo jest zrobić listę, a z listy generatora już w ten sam sposób nie zrobimy.
      Generator oszczędza nam zajmowanej pamięci ale też pozwala przetwarzać dane od razu po tym jak otrzymamy z niego jedną wartość, a w przypadku listy, musimy czekać aż powstanie cała lista (chyba, że inny mechanizm dodaje do niej dane jedna po drugiej).
      ########
      Jeśli potrzebujesz przechowywać dane w liście i odwoływać się do nich wiele razy, to potrzebujesz listy. To jest przypadek kiedy masz np listę zakupów i później będziesz modyfikował ich liczbę, liczył cenę i tak dalej.
      Ale jeśli nie potrzebujesz jednocześnie wszystkich danych w pamięci, to generator jest super. To się sprawdza gdy mamy sporo danych i musimy z każdą z informacji coś zrobić ale nie musimy mieć ich wszystkich cały czas dostępnych i do nich później wracać. Gdybyśmy do nich wracali, musielibyśmy uzyskiwać je ponownie. W tym przypadku można po prostu zrobić z generatora listę.
      Generatory są właśnie o tyle wygodne, że można z nich łatwo zrobić listę i używać ich tak jak nam wygodnie, a z listy już niestety nie zrobisz generatora który oszczędzi pamięci. Z tego powodu tam gdzie ma to sens , lubię mieć generatory :)
      ########
      A teraz może jakiś realistyczny przykład.
      Załóżmy, że masz dużo plików do przetworzenia. Złożony przykład to jakieś pliki w silniku gry. Przetwarzanie ich często długo trwa.
      Prosty przykład to po prostu zapchany dysk komputera ;) Będziemy się tego trzymali dla uproszczenia.
      Masz skrypt który zamienia pliki tekstowe na pdfy. Musisz znaleźć wszystkie pliki tekstowe na dysku i wygenerować te pdfy.
      Jeśli używasz funkcji która zwraca listę, to będzie długo się przetwarzała i może zwrócić naprawdę olbrzymią listę która zajmuje masę pamięci.
      Może skończyć się tak, że będziesz czekał długo aż program wylistuje te pliki, a na końcu scrashuje.
      Użyjmy zamiast tego generatora który zwraca ścieżkę do jednego pliku.
      Możesz w takim przypadku od razu utworzyć pdf, a potem generator zwróci ci kolejną ścieżkę txt z której zrobisz kolejnego pdfa. I tak w kółko :)
      Przy generatorze też łatwiej jest pauzować i wznawiać ponownie cały proces. Nie musisz w środku implementować pauzowania tylko po prostu pauzujesz pętlę która iteruje po tym generatorze.
      for file_path in generator_returning_txt_paths(root_path="C:/"):
      convert_to_csv(file_path)

    • @Piolas83
      @Piolas83 8 หลายเดือนก่อน

      @@KreatywnyKoder Dzięki bardzo za treściwe wyjaśnienie. Pozdrawiam.