to jest nowy rozdział�
477
Szalone zapętlenie
12. Zaawansowana iteracja
Właśnie przyszedł mi do głowy
wspaniały pomysł. Co by było,
gdybym mogła przyspieszyć
działanie swoich pętli?
To zdumiewające, ile czasu nasze programy spędzają w pętlach.
Nie jest to duża niespodzianka, ponieważ zadanie większości programów polega na szybkim wykonywaniu pewnych
czynności bardzo wiele razy. Jeśli chodzi o optymalizację pętli, do dyspozycji mamy dwa podstawowe sposoby:
pierwszy polega na poprawieniu składni pętli (aby ułatwić definiowanie pętli), a drugi sprowadza się do poprawienia
sposobu działania pętli (aby były one wykonywane szybciej). Na wczesnym etapie istnienia języka Python 2 (czyli
dawno
,
dawno
temu) jego projektanci wprowadzili pewną cechę języka, która stanowiła implementację obydwu
tych sposobów i otrzymała dość dziwną nazwę: komprehencja
1
(ang.
comprehension
). Nie daj się jednak zniechęcić
tej dziwacznej nazwie, ponieważ zanim dojdziesz do końca tego rozdziału, będziesz się zastanawiał, jak do tej pory
w ogóle mogłeś obyć się bez komprehencji.
1
Słowo „komprehencja” funkcjonuje w języku polskim w zupełnie innym znaczeniu, jednak z powodu braku w rodzimej
literaturze informatycznej odpowiedniego tłumaczenia (tj. prostego, powszechnie stosowanego, jednoznacznego i właściwie
oddającego sens tego pojęcia) postanowiłem tu wybrać mniejsze zło i zastosować pewnego rodzaju kalkę językową, którą
łatwo jest skojarzyć z oryginalnym terminem. Słowa odpowiadającego znaczeniowo samemu wyrazowi „comprehension”
nie udało mi się znaleźć w innych polskich książkach o Pythonie, spotyka się je wyłącznie w połączeniach takich jak „list
comprehension”, które jest zwykle tłumaczone jako „lista składana” lub „wyrażenie listowe” — przyp. tłum.
478
Rozdział 12.
Dane lotów
Brzęczyki z Bahamów mają dokąd lecieć
Aby przekonać się, co możesz osiągnąć dzięki zastosowaniu komprehencji pętli,
przyjrzysz się teraz pewnym „prawdziwym” danym.
Działająca w Nassau na wyspie New Providence firma
Brzęczyki z Bahamów oferuje
krótkodystansowe loty pomiędzy wybranymi lotniskami na większych wyspach archipelagu.
Ta linia lotnicza jako pierwsza na rynku wprowadziła elastyczny rozkład lotów: na podstawie
zapotrzebowania z poprzedniego dnia przewiduje ona (choć jest to tylko nieco bardziej
fantazyjne określenie słowa „zgaduje”), ile lotów będzie potrzebnych danego dnia. Na końcu
każdego dnia
Centrala BB generuje na następny dzień plan lotów, który przyjmuje postać
tekstowego pliku CSV (ang.
comma-separated value, wartości rozdzielone przecinkami).
Poniżej możesz zobaczyć, co zawiera plik CSV z rozkładem lotów na jutro.
GODZINA,MIEJSCE DOCELOWE
09:35,FREEPORT
17:00,FREEPORT
09:55,WEST END
19:00,WEST END
10:45,TREASURE CAY
12:00,TREASURE CAY
11:45,ROCK SOUND
17:55,ROCK SOUND
To zawartość standardowego pliku
CSV,
którego
pierwszy wiersz zawiera
nagłówek. Wszystko wygląda tu
świetnie
poza
tym, że każdy tekst zapisany jest
WIELKIMI LITERAMI (co trochę trąci
myszką).
Nagłówek informuje nas, że
mamy się spodziewać
dwóch
kolumn
danych, z których
jedna zawiera godziny,
druga
zaś
— miejsca docelowe.
Reszta pliku
CSV
zawiera dane dotyczące
samych
lotów.
Mamy dokąd
lecieć, mamy z kim
się spotkać...
Tutaj
umieść
ścieżkę
dostępu
do
używanego
przez
siebie
folderu.
To są
surowe
dane
CSV
pochodzące
z
pliku.
Metoda read zasysa
za jednym zamachem
wszystkie
znaki
znajdujące się w pliku.
Centrala nazwała ten plik CSV buzzers.csv.
Gdyby poproszono Cię o odczytanie danych z tego pliku i wyświetlenie ich na ekranie,
skorzystałbyś z instrukcji
with
. Poniżej możesz zobaczyć, co zrobiliśmy w wierszu poleceń
środowiska IDLE po użyciu modułu
os
języka Python w celu przejścia do katalogu
zawierającego nasz plik.
Porady maniaka
Więcej informacji na temat
formatu CSV możesz znaleźć pod
adresem
https://pl.wikipedia.org/
wiki/CSV_(format_pliku)
.
Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.