Pytania twarde z rozmów Python Flashcards
HTTP
HTTP to skrót od Hypertext Transfer Protocol i jest to główny protokół używany współcześnie w przegladarkach.
Jest to protokół bezstanowy, tzn. ani serwer (ani klient) nie przechowuje informacji o tym, jakie były wcześniej zapytania pomiędzy określonym serwerem i klientem oraz nie posiada stanu wewnętrznego
W zapytaniach HTTP możemy wyróżnić dwa elementy: nagłówek i ciało.
Nagłówek ma minimum 1 wiersz, który określa metodę HTTP, adres URI oraz wersję protokołu HTTP (obecnie korzystamy z wersji 1.1, oznaczanej w nagłówku jako HTTP/1.1 ). Przykładowy pierwszy wiersz nagłówka wygląda nastepująco:
GET / HTTP/1.1
Gdzie:
GET — to nazwa metody HTTP
/ — to tzw. URI, czyli ta część adresu, który wystepuje po domenie
HTTP/1.1 — okreslenie protokołu, tutaj HTTP w wersji 1.1
Metody HTTP:
GET
Pobieranie zasobu lub jego wyświetlenie, np. wyświetlenie formularza lub strony. Parametry można przekazywac jedynie poprzez adres (np. ?nazwa=wartosc&nazwa2=wartosc2)
Metody HTTP:
POST
Przesłanie danych zapisanych jako pary klucz-wartość do serwera
Np. wysłanie formularza, gdzie kluczem jest nazwa danego pola a wartością wpisana przez nas wartość
Metoda ta pozwala przesyłać także pliki, a także wiele plików/par klucz-wartość jednocześnie
Parametry są przekazywane w ciele zapytania, można także przekazywać parametry poprzez adres (tak jak w metodzie GET)
Metody HTTP:
PUT
Zastępowanie pełnego zasobu danych. Post wymaga, by w ciele żądania znajdował się komplet danych umożliwiających utworzenie całego obiektu po stronie serwera.
Metody HTTP:
DELETE
Usuwanie zasobu na serwerze, z racji bezpieczeństwa praktycznie zawsze jest wyłaczona domyślnie. Obecnie używana głównie w przypadku RESTowych serwisów, wskazując, że dany zasób ma być usunięty (i obsługiwany przez aplikację, a nie sam serwer).
Metody HTTP:
HEAD
Analogiczny do zapytania GET, z tym wyjątkiem, że nie zwraca ciała (zawartości). Służy do pobrania metadanych zasobów w postaci nagłówków HTTP. Dla danego adresu zwraca same nagłówki.
Czym jest Mockowanie?
Mock to obiekt pomocniczy, którego używa się zamiast rzeczywistej implementacji w trakcie testów.
Atrapa obiektu (ang. mock object) – symulowany obiekt, który w kontrolowany sposób naśladuje zachowanie rzeczywistego obiekt
Pozwala on na określenie jakich interakcji spodziewamy się w trakcie testów. Następnie można sprawdzić czy spodziewane interakcje rzeczywiście wystąpiły
Np
- symulacja odpowiedzi z serwisów
- symulowanie konkretnych wartości zwracanych przez aplikację
- mockowanie obiektów klas, z którymi wchodzimy w interakcję
Co to jest paradygmat programowania?
Paradygmaty programowania – to różne sposoby, w których dany program lub język programowania może być zorganizowany. Każdy paradygmat składa się z pewnych struktur, cech i opinii na temat tego, jak należy rozwiązywać typowe problemy programistyczne.
generator Pythona
GENERATOR to funkcja, która zwraca iterator.
Zwróci po 1 wartości przy każdym uruchomieniu.
Można rozpoznać generator po słowie
yield, a także next.
Słowo yield informuje interpreter, że ta funkcja jest generatorem
Funkcja next zwraca obiekt generatora przy każdym użyciu, jednak zamiast powtarzać next kilkukrotnie w kodzie można go umieścić w pętli for
Jeśli przekroczymy liczbę iteracji podczas używania generatora to otrzymamy StopIteration error
dekorator Pythona
DEKORATORY - to funkcje, które za argumenty przyjmują inne funkcje i modyfikują ich działanie albo coś do niej dodaje (dekoruje ją)
lambda
LAMBDA nazywana jest też funkcją anonimową, często używa się ją jako argumentu dla innych funkcji takich jak sorted(), map() czy filter()
Piszemy wtedy key = lambda X: X+2.
list comprehension
po polsku tłumaczy się je jako wyrażenia listowe (choć na nazwa nie jest w powszechnym użyciu)
list comprehension to bardzo lubiany przez programistów mechanizm pozwalający tworzyć listy w jednej linijce
Przykłady:
[x for x in range(5)]
> [0, 1, 2, 3, 4]
Możemy tam odnosić do innych list np.
L = [1,2,3,4,5,6]
L1 = [x**2 for x in L]
> [1, 4, 9, 16, 25, 36]
Możemy również w tych wyrażeniach umieszczać for, if, czy wyrażenia boolean
[x for x in L if x % 2 == 0]
Istnieje także dict comprehension, które umieszczamy w nawiasach wąsatych.
L = [1,2,3,4,5,6]
D1 = {x:x % 2 == 0 for x in L}
Omów typy wbudowane w Python
str – string (ciąg tekstowy), tekstowy typ danych,
int – liczba,
float – liczba zmiennoprzecinkowa,
complex – liczba zespolona,
list – lista
tuple – kortka
range – zakres, liczby naturalne stanowiące szereg arytmetyczny,
dict – słownik,
set – zbiór,
frozenset – zbiór niemutowalny,
bool – logika boolowska,
bytes – konwersja ciągu na bajty,
bytearray – mutowalny wariant bytes,
memoryview – dostęp do wewnętrznych danych obiektów obsługujących bufory protokołów.
Jakie znasz biblioteki standardowe w Python
random – biblioteka służąca do pseudolosowego generowania liczb,
datatime – moduł pozwalający na pracę z datą i godziną,
json – zapisuje listy, logikę, liczby, krotki i słowniki do pliku JSON,
pickle - pozwala na serializację (zmiana obiektu na ciąg bajtów) i deserializację obiektów Pythona
os – moduł pozwalający na integrację z systemem plików OS-a,
logging – biblioteka z API pozwalającym na zapisywanie logów.
__init__
__init__ jako plik pozwala na oznaczenie, że dany folder jest pakietem
W OOP to specjalna metoda wywoływana za każdym razem kiedy tworzona jest instancja klasy
Kopiowanie obiektów w Pythonie?
Służy do tego moduł copy, który oferuje dwie metody
copy()
deepcopy()
Za pomocą copy() tworzy się bitową kopię 1:1.
Zaś deepcopy() pozwala na re kursywne kopiowanie wszystkich wartości.
Czy operator = kopiuje?
nie, operator przypisania jedynie tworzy odniesienie do miejsca w pamięci, czyli za pomocą = tworzymy powiązanie pomiędzy istniejącym już obiektem a docelową nazwą zmiennej.
Zasięg (scope)
Scope to blok kodu, w którym działa dany obiekt i tylko w nim jest dostępny.
Wyróżniamy zasięg globalny i lokalny.
Przestrzenie nazw
mówią o tym jaki zasięg ma nazwa (identyfikator) danego obiektu.
Nazwy mogą działać lokalnie - w obrębie funkcji, albo globalnie w całym kodzie
Moduł a pakiet
Zarówno moduły jak i pakiety wykorzystywane są do modularyzacji kodu
Moduł to po prostu plik pythona zawierający metody, klasy zorganizowanego wokół jakiegoś tematu.
Pakiet to coś większego, gdyż składa się z kilku modułów.
Paczka określa dla nich przestrzenie (zasięg) nazw zmiennych i eliminuje konflikty pomiędzy poszczególnymi modułami.
Lista a tablica
Tablice są homogeniczne, co oznacza że zawierają dane jednego typu.
Listy są heterogeniczne, można wewnątrz nich zawszeć różne typy danych (int, float, str, bool, inne listy, słowniki itp)
PYTHONPATH
PYTHONPATH to zmienna środowiskowa pozwalająca wskazać dodatkowe lokalizacje, z których Python będzie mógł zaciągnąć moduły i paczki.
PEP8
oficjalny dokument zawierający konwencję zapisu kodu tak aby był on bardziej czytelny.
Twórca Pythona (Guido van Rossum) zaznacza, że kod jest znacznie częściej czytany niż pisany i właśnie dlatego tak ważne jest dbanie o jego czytelność i jednolitość.
Kilka ważniejszych zasad PEP8:
- 4 spacje na każdy poziom wcięcia
- do wcięć powinno się stosować spacje, a nie tabulatory
- maksymalna długość linii to 79 znaków (docstringi i komentarze – 72)
Linie mogą być zawijane (kontynuowane) poprzez dodanie lewego ukośnika “\” na końcu linii. - definicje klas i funkcji na najwyższym poziomie oddzielamy dwoma pustymi liniami.
-metody w klasie powinny być oddzielane jedną linią
- importy umieszczane są zawsze na początku pliku, po komentarzach i docstringach, a przed globalnymi i stałymi.
Powinny być pogrupowane według kolejności:
1. importy bibliotek standardowych
2. zewnętrzne importy spoza aplikacji
3. importy z lokalnej aplikacji/biblioteki
- PEP8 nie rekomenduje pojedynczego ani podwójnego cudzysłowu. Obie wersje są poprawne. Nie należy mieszać tych wersji. Wybrać jedną i trzymać się jej konsekwentnie.
- nazwy klas CamelCase
- nazwy zmiennych snake_case
- gorsze są błędne komentarze niż ich brak.
Zarządzanie pamięcią
W Pythonie za zarzadzanie pamięcią odpowiada tzw. garbage collector
Garbage collector – potocznie nazywany “odśmiecaczem”. Jest tak naprawdę automatycznym procesem odpowiedzialnym za identyfikowanie nieużywanych obiektów, a następnie za ich usunięcie. Nieużywane obiekty to takie, do których nie ma żadnych referencji, czyli nie mamy możliwości dostania się do tego obiektu