W tym artykule prezentuję moduł "time" w języku Python, który udostępnia nam zestaw metod i wartości związanych z czasem ⏰. Jeżeli interesuje Cię ten temat, to zapraszam po darmową dawkę wiedzy 😄!
PRZEDSTAWIAM CO ZAWIERA W SOBIE MODUŁ "TIME" W JĘZYKU PYTHON!
Na początek wyjaśnimy sobie o co w ogóle się rozchodzi 😁, a potem przejdę do ukazania niektórych metod.
Z CZEGO SKŁADA SIĘ MODUŁ "TIME" W JĘZYKU PYTHON?
Moduł "time" jaki występuje w języku Python, pozwala na przeprowadzanie operacji dotyczących czasu rzeczywistego ⌚. Należy przez to rozumieć między innymi 👇:
- pobieranie czasu z systemu operacyjnego,
- pobieranie czasu od uruchomienia programu,
- tworzenie opóźnienia działania programu w sekundach (tzw. "usypianie" 💤),
- wyznaczanie daty w postaci "słownej" na podstawie liczby sekund (np. "3 marca, 2021 roku").
Pełne zestawienie możliwości modułu "time" możesz wyczytać z oficjalnej dokumentacji Pythona 📖.
Wyjaśniłem pokrótce o co chodzi, więc możemy przejść do praktyki 🙂.
JAK SKORZYSTAĆ Z MODUŁU "TIME" W JĘZYKU PYTHON?
Aby skorzystać z modułu "time" w języku Python, musimy go zaimportować ↩️. U samej góry skryptu, dopisz następujący wiersz 👇:
import timeTo jest instrukcja importu ℹ️. Za jej pośrednictwem, uzyskujesz dostęp do modułów i ich zawartości 🔓.
Korzystając z samego słowa "import", dostęp obejmuje cały moduł bez wyjątku. Jeżeli interesuje Cię tylko jakaś pojedyncza metoda lub wartość, możesz skorzystać z dodatkowego słowa "from" i połączyć je ze słowem "import", pisząc w taki sposób 👇:
from time import [wartość/metoda występująca w module]Oba zapisy różnie wpływają na odwoływanie się do składowych, a my poprzestaniemy na pierwszym w kolejności 1️⃣. Tłumaczenie słów "import" i "from" znajdziesz w osobnych artykułach ℹ️.
Mamy dostęp do modułu "time", to teraz dowiaduj się jakie metody w sobie posiada 🚀!
JAKIE METODY POSIADA "TIME" W JĘZYKU PYTHON?
Moduł "time" w Pythonie posiada w sobie między innymi następujące metody 👇:
- time,
- sleep,
- gmtime,
- strftime.
Przypomnę, że całą listę metod możesz poznać sięgając do oficjalnej dokumentacji Pythona 📖. A my w tym artykule, przyjrzymy się tylko tym wyżej wymienionym 😉.
TIME
Tak, jest metoda o tej samej nazwie, co sam moduł 😄. Ona odpowiada za zwrócenie liczby zmiennoprzecinkowej (z ułamkiem) oznaczającej liczbę upłyniętych sekund od tzw. "czasu uniksowego" 💥. Czas uniksowy oznacza konkretnie datę 1 stycznia, 1970 roku, którą przyjmuje się za "datę narodzin" pierwszego systemu operacyjnego w historii, Unix 😊! Ponieważ minęło już sporo lat od tamtej daty, spodziewaj się naprawdę ogromnej liczby 😅!
To jest przykład użycia 👇:
current_time_in_seconds = time.time()Natomiast to niejedyny możliwy sposób użycia metody "time" 😮! Możemy dzięki niej, zmierzyć czas działania naszego programu ❤️! Wystarczy pobrać aktualny czas systemowy w dwóch różnych miejscach programu, a na samym końcu wykonać różnicę, odejmując pierwszy pomiar od drugiego 👇:
time_in_seconds_since_start = time.time()
# instrukcje
time_in_seconds_before_end = time.time()
program_duration_in_seconds = time_in_seconds_before_end - time_in_seconds_since_start
print(program_duration_in_seconds)Tym sposobem uzyskujemy najprostszy czasomierz powstały z dwóch odnotowanych odcinków czasowych 😊!
Metoda "time" zwraca liczbę upłyniętych sekund od "czasu uniksowego" (1 stycznia, 1970 roku) w postaci liczby zmiennoprzecinkowych (bez ułamka).
SLEEP
"sleep" odpowiada za dosłowne "usypianie" programu, lecz przekładając na prosty język, chodzi o wstrzymanie dalszego wykonywania instrukcji na czas podany w sekundach ✋. Gdy dla przykładu mamy taki zapis 👇:
print('Pojawiam się natychmiast')
time.sleep(1)
print('Pojawiam się po pewnym czasie!')to po uruchomieniu, pierwszy łańcuch znaków pojawi się od razu, a drugi dopiero po upływie jednej sekundy 😮! Kiedy wykonuje się metoda "sleep", to jesteśmy "zablokowani" na podany czas i nie możemy nic zrobić, do momentu upłynięcia tego czasu ⏸.
Zaznaczam ważną rzecz ⚠️! To "usypianie" nie działa tak, jak możesz sobie wyobrażać 😳! "sleep" istotnie dodaje opóźnienie do programu, natomiast bardziej przypomina sytuację zawieszenia się programu, po którym pojawia się komunikat systemu, że "aplikacja nie odpowiada" 😱! Ta metoda sprawia, że "zamrożony" jest cały program, a to oznacza, że na podany czas nie będzie reagował na jakiekolwiek bodźce od strony użytkownika ❌!
Jeżeli chciał(a)byś uzyskać efekt znany w grach, że masz określoną liczbę sekund na wykonanie czegoś, natomiast cała aplikacja działa "normalnie", to zdecydowanie nie jest właściwe podejście i trzeba stworzyć własny system do takich zadań ⚠️!
Metoda "sleep" powoduje tymczasowe "zamrożenie" programu, co powoduje wstrzymanie wykonywania dalszych instrukcji na podaną liczbę sekund.
GMTIME
"gmtime" to metoda pobierająca aktualny czas jaki jest w zegarze Twojego systemu operacyjnego ⏰. O wiele ciekawszy jest format zwracanej wartości 🔥! Gdy wywołasz sobie tę metodę i podstawisz pod funkcję "print" 👇:
current_time = time.gmtime()to Twoim oczom ujrzy się nie jedna wartość, a krotka z 9 wartościami (konkretniej, to typ "struct_time", lecz to wyjaśnię za moment 💥) 😱! Krotka to struktura danych zachowująca kolejność wprowadzonych do niej elementów, dopuszcza powtarzające się elementy i nie zezwala na ich modyfikację (więcej informacji o nich zostanie zawartych w odrębnym artykule ℹ️).
Postać tejże krotki przyjmie taką formę (w zależności od Twojego zegara w systemie, możesz dostrzec inny komplet wartości ⚠️) 👇:
time.struct_time(tm_year=2021, tm_mon=3, tm_mday=3, tm_hour=9, tm_min=46, tm_sec=54, tm_wday=2, tm_yday=62, tm_isdst=0)Widać wyraźnie, że otrzymujemy zestaw przeróżnych wartości, nie tylko tak oczywistych, jak rok czy dzień miesiąca.
Oto co oznaczają poszczególne wartości 👇:
- tm_year (rok),
- tm_mon (miesiąc jako wartość od 1 do 12),
- tm_mday (dzień miesiąca jako wartość od 1 do 31 - "gmtime" potrafi zidentyfikować czy dany miesiąc ma mniej, niż 31 dni),
- tm_hour (godzina dnia jako wartość od 0 do 23, czyli gdy będzie południe, to pojawi się wartość 11 ⚠️),
- tm_min (minuta dnia jako wartość od 0 do 59),
- tm_sec (sekunda dnia jako wartość od 0 do 61 - zakres uwzględnia tzw. "sekundę przestępną" ℹ️),
- tm_wday (dzień tygodnia jako wartość od 0 do 6),
- tm_yday (dzień roku jako wartość od 1 do 366),
- tm_isdst (wartość określająca czy aktualnie obowiązuje czas letni: 1 = obowiązuje, 0 = nie obowiązuje, -1 = nie wiadomo czy obowiązuje ℹ️).
Możesz bez problemu odwołać się do każdej z nich stosując notację indeksową, tak jak w odniesieniu do elementów listy (modyfikowalnej struktury danych zezwalającej na duplikaty i zapamiętującej kolejność wprowadzanych do niej elementów ℹ️) 👍:
current_year = time.gmtime[0]Ponieważ krotka zapamiętuje kolejność elementów, tak jak lista, masz pewność, że ona nigdy się nie zmieni 😊!
A teraz napiszę dokładniej pochodzenie takiej struktury!
SKĄD POCHODZI "STRUCT_TIME" W JĘZYKU PYTHON?
Python zaczerpnął wiele konstrukcji z języka C, a "struct_time" jest jedną z nich 😲! Cytując oficjalną dokumentację Pythona, jest to "interfejs nazwanej krotki" 👀. Nazwa pochodzi od nazwy konstrukcji występującej w języku C, "struct", a definicja samej struktury jaka obowiązuje w metodzie "gmtime" znajduje się w standardowej bibliotece języka C, w pliku nagłówkowym "time.h" 💥! To jest ten fragment (może się różnić w zależności od zainstalowanego kompilatora ⚠️) 👇:
#ifndef _TM_DEFINED
#define _TM_DEFINED
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
#endifJak łatwo zauważyć, postać jest identyczna 🔥! Jedyną różnicą jest kolejność składowych. Także postać struktury została zaczerpnięta z języka C, a sama nazwa została już nadana osobno 💡.
Metoda "gmtime" odpowiada za zwracanie aktualnego czasu systemowego w postaci krotki z 9 informacjami na temat czasu m.in. dzień miesiąca czy rok.
STRFTIME
Metoda o nietypowej nazwie "strftime" (prawdopodobnie skrót od "string formatted time" 🙂) służy do zwracania odpowiednio sformatowanego łańcucha znaków na podstawie niejakich "specyfikatorów" 🔥! Tutaj sięgamy terminologii aż do języka C będącego "ojcem języków wysokiego poziomu" 😮!
Najpierw pokażę bardzo prosty przykład, aby można było łatwiej tłumaczyć teorię 👇:
print(time.strftime('Teraz mamy %Y rok!', time.gmtime()))Do metody "strftime" wprowadzamy 2 parametry 👇:
- łańcuch znaków ze specyfikatorami formatu (w tym przypadku jest tylko jeden jako "%Y"),
- krotka z 9 wartościami związanymi z czasem (tutaj korzystamy z metody "gmtime" 😉).
Kiedy program przejdzie do wykonywania tej metody, otrzymamy łańcuch znaków informujący który obecnie jest rok na podstawie Twojego zegara systemowego ❤️! Dzięki temu, nie musimy ręcznie "wyjmować" pojedynczych argumentów z krotki i wykonywać wielokrotnej konkatenacji łańcuchów 👍.
Ten fragment 👇:
%Yto jest wspomniany specyfikator 🔥! Teraz można wprowadzić w temat teoretycznie 😝!
CZYM JEST SPECYFIKATOR W FORMATOWANIU ŁAŃCUCHÓW ZNAKÓW?
Specyfikator jest symbolem osadzonym wewnątrz łańcucha znaków będącym kombinacją znaku procent i odpowiedniej litery np. "%d" ℹ️. W trakcie przetwarzania takiego łańcucha przez daną funkcję, specyfikator staje się "gniazdem" dla argumentu podanego jako następny w kolejności i "zamieniony" na parametr "wstawiany" do łańcucha ⏏️. W związku z tym, nie zobaczymy na wyjściu tych specyfikatorów, tylko podane po łańcuchu formatującym wartości 💥! Gdy wszystkie wartości są "wstawione" do łańcucha w miejscach wyznaczonych przez specyfikatory, tak sformatowany łańcuch znaków jest zwracany jako wynik końcowy funkcji ✅.
Jeżeli jesteś bardziej zainteresowany(-a) tematem specyfikatorów, to zerknij na materiał opisujący funkcję "printf" w języku C, gdyż idea operowania na specyfikatorach w metodzie "strftime" pochodzi właśnie od tego języka 💡. A jak chcesz poznać pełną listę specyfikatorów obsługiwanych przez metodę "strftime" i w jaki sposób wpływają na otrzymany rezultatu, to znajdziesz ją w oficjalnej dokumentacji Pythona 📖.
Metoda "strftime" formatuje podany łańcuch znaków poprzez "wszczepienie" wartości z krotki z informacji na temat czasu do łańcucha, w miejsce określonych specyfikatorów.
Koniec tematu 😊. Wiesz już, że do czego służy moduł "time" w języku Python i jakie posiada w sobie metody 💪!