Pytania twarde z rozmów Python Flashcards

1
Q

HTTP

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Metody HTTP:
GET

A

Pobieranie zasobu lub jego wyświetlenie, np. wyświetlenie formularza lub strony. Parametry można przekazywac jedynie poprzez adres (np. ?nazwa=wartosc&nazwa2=wartosc2)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Metody HTTP:
POST

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Metody HTTP:
PUT

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Metody HTTP:
DELETE

A

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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Metody HTTP:
HEAD

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Czym jest Mockowanie?

A

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ę

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Co to jest paradygmat programowania?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

generator Pythona

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

dekorator Pythona

A

DEKORATORY - to funkcje, które za argumenty przyjmują inne funkcje i modyfikują ich działanie albo coś do niej dodaje (dekoruje ją)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

lambda

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

list comprehension

A

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}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Omów typy wbudowane w Python

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Jakie znasz biblioteki standardowe w Python

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

__init__

A

__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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Kopiowanie obiektów w Pythonie?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Czy operator = kopiuje?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Zasięg (scope)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Przestrzenie nazw

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Moduł a pakiet

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Lista a tablica

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

PYTHONPATH

A

PYTHONPATH to zmienna środowiskowa pozwalająca wskazać dodatkowe lokalizacje, z których Python będzie mógł zaciągnąć moduły i paczki.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

PEP8

A

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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Zarządzanie pamięcią

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
type()
Funkcja type zwraca typ danych podanego obiektu. Funkcja ta może się okazać przydatna podczas tworzenia funkcji obsługujących kilka typów danych.
26
Czy parametry do funkcji są w Pythonie przekazywanie przez wartość, czy referencję?
typy niemutowalne (niezmienne) - przez wartość typy mutowalne (zmienne) - przez referencje W dokumentacji Pythona możemy przeczytać, że przekazywanie argumentów odbywa się zawsze przez wartość, przy czym ta wartość jest zawsze referencją do obiektu, a nie wartością tego obiektu. W praktyce oznacza to, że w przypadku niezmiennych typów danych funkcje w Pythonie działają tak, jakby ich argumenty przekazywane były przez wartość, natomiast w przypadku typów zmiennych ­ na ogół jak przez referencję.
27
zmienna
Zmienna to miejsce w pamięci, które wskazuje na jakąś wartość. Zmiennych używamy, żeby nie operować na konkretnych wartościach. Pojęcie zmiennej tłumaczymy jako pudełko oznaczone symbolem X, w którym schowane są potrzebne nam dane
28
Typy zmiennych w Pythonie
1. Liczby – integer (typ całkowity) albo float (typ zmiennoprzecinkowy) 2. Stringi - pojedyncza litera lub ciąg znaków Kolekcje 3. Listy 4. Tuple (krotki) 5. Słowniki 6. Wartości Booleanowskie (True or False) ... w niektórych opracowaniach spotkałam się również z funkcją jako typem
29
Wymień typy mutowalne i niemutowalne
Referencja (adres miejsca w pamięci) wskazuje na konkretną wartość. Jeśli nadpiszemy typ mutowalny to referencja pozostanie ta sama, ale zmieni się wartość. Jeśli nadpiszemy typ niemutowalny to stworzy się nowa referencja wskazująca na nową (zmienioną) wartość. TYPY MUTOWALNE list dict bytearray + obiekty użytkownika TYPY NIEMUTOWALNE string tuple int, float, complex bool range frozenset bytes
30
język skryptowy
Python określany jest jako język skryptowy Język skryptowy jest językiem programowania, który umożliwia uruchamianie w specjalnym środowisku programów (skryptów). Z reguły te programy są interpretowane a nie kompilowane. Przeznaczeniem tych języków jest automatyzacja powtarzalnych zadań, są również stosowane jako języki osadzone w większych aplikacjach.
31
interpretowalny
Z punktu widzenia programisty Python jest uważany za język interpretowalny. Wiele współczesnych języków wykorzystuje oba procesy, gdzie najpierw treść programu jest kompilowana do kodu bajtowego, a następnie interpretowana przez program zwany maszyną wirtualną. Python bazuje na obu technikach, ale z punktu widzenia programisty jest uważany za język interpretowalny. Język interpretowany – język programowania, w którym interpreter analizuje program linia po linii. Przeciwieństwem języków interpretowanych są języki implementowane w postaci kompilatora (kompilator najpierw kompiluje cały program, a następnie zaczyna działać). Języki interpretowane są nieco wolniejsze od języków kompilowanych, lecz prostsze do napisania (mniej rzeczy o które trzeba się martwić podczas pisaniaskodu)
32
dynamicznie typowany
Python sam automatycznie rozpoznaje typ zmiennych na podstawie kodu. Jest językiem silnie typowanym, czyli nie trzeba w ogóle deklarować typów zmiennych. Istnieje jednak biblioteka Pythona, która to umożliwia
33
duck typing
Duck typing – rozpoznawanie typu obiektu nie na podstawie deklaracji, ale przez badanie metod udostępnionych przez obiekt. Duck typing zazwyczaj wykorzystuje się w dynamicznych językach programowania takich jak Python, Ruby, Groovy czy JavaScript. Technika ta wywodzi się z powiedzenia: „jeśli chodzi jak kaczka i kwacze jak kaczka, to musi być kaczką”
34
__init__
initializer (inicjator) metoda wywoływana za każdym razem kiedy tworzona jest instancja klasy Służy do ustawienia atrybutów nowo utworzonej instancji Metoda __init__ nie tworzy nowej instancji, lecz otrzymuje ją gotową (jako pierwszy argument). Prawdziwym konstruktorem jest metoda __new__ -- ona tworzy instancję.
35
__new__
tworzy nową instancję klasy, jest prawdziwym konstruktorem. jest wywoływana jako pierwsza (przed __init__) i zwraca nową instancję klasy Zwykle nie jest definiowana jawnie
36
__str__
Celem __str__ jest wypisanie informacji o obiekcie w takiej formie, aby była czytelna dla człowieka. Aby rozbudować ilość informacji wyświetlanych o obiekcie, musimy dodać specjalną metodę o nazwie __str__ Domyślnie wyświetla ona pełną nazwę obiektu (wraz z umiejscowieniem) i jego adres pamięci (to nas nie powinno interesować). Możemy jednak zamienić ją tak, by zwracała bardziej przydatne informacje o obiekcie. Aby to zrobić, powinniśmy zdefiniować metodę __str__ i zwrócić z niej wartość string, która ma reprezentować obiekt.
37
__repr__
Celem __repr__ jest podanie precyzyjnej, ale niekoniecznie czytelnej dla człowieka informacji o obiekcie. repr jest wbudowaną funkcją Pythona, która zwraca reprezentację danego obiektu w postaci łańcucha znaków. Działa dla dowolnych obiektów, nie tylko obiektów klas.
38
__add__
metoda specjalna.implementację operatora dodawania dla obiektów zapisanych za pomocą klas W Pythonie przeciążanie operatorów robi się za pomocą metod specjalnych.
39
__radd__
reverse addition Metoda Pythona __radd__() implementuje operację odwrotnego dodawania, czyli dodawania zamienionymi miejscami obiektami. Jest wywoływana przez Python, gdy __add__ z jakiegoś powodu nie zadziała
40
konstruktor klasy
konstruktor – specjalna metoda danej klasy, wywoływana podczas tworzenia jej instancji. Podstawowym zadaniem konstruktora jest zainicjowanie obiektu. W Pythonie jest to metoda __init__
41
__nazwametody__
tak oznacza się metody specjalne (magiczne)
42
przeciążanie operatorów
W Pythonie przeciążanie operatorów robi się za pomocą metod specjalnych. Chodzi o to, aby operacje które są możliwe do wykonania na obiektach wbudowanych (takie jak dodawanie, odejmowanie, dzielenie, modulo itd) były możliwe do wykonania na obiektach zapisanych za pomocą klas (zdefiniowanych przez użytkownika). Klasy mogą nadpisywać większość operacji wbudowanych. Nie istnieją wartości domyślne dla metod przeciążania operatorów (i nie są one potrzebne).
43
metoda a funkcja
metoda to funkcja powiązana z klasa
44
Czy Python może być używany do po stronie klienta WWW i serwera WWW?
Tak, lecz najlepiej nadaje się do backendu, czyki tworzenia aplikacji po stronie serwera WWW.
45
class zmienne: def __init__(self): self.publiczna = 10 self._chroniona = 20 self.__prywatna = 30
W Pythonie pola i metody klasy dzielą się na trzy grupy: 1. publiczne (public) domyślnie wszystkie zmienne i metody \ są publiczne 2. prywatne (private) dla klas dowolny użytkownik nie może ich zmodyfikować, chyba że autor klasy da taką możliwość Zmienne i metody prywatne rozpoczynają się od podwójnego podkreślnika __zmienna. 3. chronione (protected) "by convention" te metody i zmienne nie powinny być modyfikowane przez użytkownika, ale mogą być modyfikowane przez obiekty będące instancjami tzw. klas pochodnych. Ich nazwy rozpoczynają się od pojedynczego podkreślnika: _zmienna.
46
Wymień co najmniej 3-4 korzyści płynące z używania Pythona w porównaniu z innymi językami skryptowymi, takimi jak np. Javascript
1. Python nie jest skomplikowanym językiem gdyż zawiera wiele wbudowanych rozwiązań jeśli chodzi o podstawowe funkcje np. w porównaniu do C++ nie trzeba pisać funkcji aby podzielić stringa 2. Jest stosunkowo łatwy w czytaniu 3. Zapewnia szeroki wybór bibliotek 4. Charakteryzuje się dużą społecznością
47
PIP PyPI
Python Installer Package narzędzie wiersza poleceń umożliwiający instalowanie modułów Pythona PyPI - Python Package Index - strona, na której dostępna jest ogromna ilość pakietów do Pythona wraz z dokumentacją to z niej pip ściąga instalowane przez nas pakiety
48
unittest
standardowa biblioteka Pythona, zawiera zestaw klas służących do testowania modułów.
49
Jak parsować stringi i znajdywać wzorce?
Służy do tego moduł re, który wchodzi w skład biblioteki standardowej i pozwala na pracę z wyrażeniami regularnymi (Regex)
50
Metody HTTP: PATCH
Metoda PATCH podobnie jak PUT służy do aktualizacji danych o obiekcie, jednak wymaga ona, by dany obiekt istniał. A to dlatego, że nie przesyła ona w żądaniu kompletu danych, a jedynie te dane, które mają zostać zaktualizowane
51
Back-end
Back-end aplikacji internetowych to program, który działa po stronie serwera. Możemy go tworzyć za pomocą języka Python. Zawiera on m.in. logikę obsługi żądań od użytkowników (komunikację z klientem). Odbiera żądania (requesty) i wysyła zwrotnie odpowiednie dane (Web responses). Przykładowe zadania realizowane po stronie back-end’u: - uruchomienie skryptu do wygenerowania HTML - obsługa baz danych: dostępu do danych, przechowywanie i aktualizowanie rekordów - szyfrowanie i odszyfrowywanie danych - obsługa logowania się przez użytkowników na ich konta - obsługa plików znajdujących się na serwerze – wysyłanie i pobieranie plików
52
Front -end
Front-end jest tym, co użytkownik widzi i z czym wchodzi w interakcję (interfejs użytkownika) w przeglądarce internetowej. W przypadku stron internetowych front-end tworzymy w języku JavaScript
53
system do zarządzania treścią
CMS (Content Management System) służy do samodzielnego publikowania treści na stronach internetowych, ich modyfikowania czy organizowania
54
Monkey patch
Monkey patch to fragment kodu, który rozszerza lub modyfikuje inny kod podczas wykonania programu. Termin monkey patching w Pythonie odnosi się do dynamicznych modyfikacji klasy lub modułu w czasie uruchamiania. Monkey patching jest możliwy tylko w językach dynamicznych, których dobrym przykładem jest tutaj Python. Polega on na ponownym otwieraniu istniejących klas lub metod podczas uruchamiania kodu i zmienianiu ich zachowania.
55
słowo kluczowe (keyword)
specjalne słowa, zarezerwowane do konkretnych celów i nie powinny być używane poza tymi celami Te słowa kluczowe są zawsze dostępne — nigdy nie będziesz musiał importować ich do swojego kodu. False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield
56
pass
pass to instrukcja, , której można użyć jako symbolu zastępczego dla przyszłego kodu. Gdy pass jest wykonywane, nic się nie dzieje, ale unikamy wyświetlenia błędu
57
built ins
to wbudowane funkcje Pythona np. type(). slice(), zip()
58
String Concatenation
Using + operator. Using join() method. Using % operator (string formatting) Using format() function. Using f-string (Literal String Interpolation) e.g s1 = 'Hello ' s2 = 'World' s3 = s1 + s2 > 'Hello World' s1 = ('Hello', 'World') s2 = " ".join(s1) > 'Hello World' s1 = 'Hello ' s2 = 'World' s3 = "%s %s" % (s1, s2) > 'Hello World' s1 = 'Hello ' s2 = 'World' s3 = "{} {}".format(s1, s2) > 'Hello World' s1 = 'Hello' s2 = 'World' s3 = f"{s1} {s2}" > 'Hello World'
59
list() dict()
list() tworzy listę elementów L = list( ["John", 36, "Norway"] ) L = ["John", 36, "Norway"] dict() tworzy słownik (tablica hashowana) D = dict(name = "John", age = 36, country = "Norway") D = {"name": "John", "age": 36, "country": "Norway"}
60
set() list()
set() myset = {"apple", "banana", "cherry"} Set jest nieuporządkowany, niemutowalny i nieindeksowany list() mylist = ["apple", "banana", "cherry"] Lista jest uporządkowana (ordered), mutowalna i pozwala na duplikację danych
61
multiple inheritance
dziedziczenie po więcej niż 1 klasie Wielokrotne dziedziczenie oznacza, że można tworzyć klasy, które dziedziczą po wielu klasach jednocześnie. Nie jest to możliwe w językach Java i C class Subclass(SuperClass1, SuperClass2): # initializer # methods
62
sessions
Sesja – tymczasowo, zapamiętane na serwerze dane dotyczące połączenia z klientem. Cechą charakterystyczną sesji jest to, że przypisane do niej dane mają przeważnie charakter tymczasowy (w przeciwieństwie np. do preferencji przypisywanych do konta klienta). Sesje są w pełni obsługiwane w Django. Korzystając z ram sesji, można łatwo przechowywać i pobierać tymczasowe dane na podstawie liczby odwiedzających witrynę Ta struktura przechowuje dane po stronie serwera i zajmuje się wysyłaniem i odbieraniem plików cookie. Te pliki cookie składają się z identyfikatora sesji, ale nie z samych danych, chyba że wyraźnie użyjesz cookie-based backend.
63
cookies
Ciasteczka (ang. cookies) to pliki, zapisywane i przechowywane na komputerze lub innym urządzeniu klienta podczas gdy odwiedza on różne strony WWW w sieci Internet. Plik „cookie” zazwyczaj zawiera: - podstawowe informacje na temat nazwy strony WWW, z której pochodzi, - „długość życia” ciasteczka — czyli jaki ustawiony jest czas jego istnienia na komputerze klienta - unikalny numer służący do identyfikacji przeglądarki, z jakiej następuje połączenie ze stroną WWW.
64
context manager
Menadżer kontekstu (ang. context manager) to obiekt, który odpowiednio zarządza danym zasobem, zapewniając, że zostanie on odpowiednio zamknięty. Przez zamknięty mam tu na myśli czyszczenie, zwalnianie zasobów oraz sprzątanie po wykonaniu bloku kodu. Dobrym przykładem takiego obiektu, jest użycie open w Pythonie. Korzystając z niego w domyślny sposób, otwieramy plik, odczytujemy pewien jego element, a następnie go zamykamy.
64
context manager
Menadżer kontekstu (ang. context manager) to obiekt, który odpowiednio zarządza danym zasobem, zapewniając, że zostanie on odpowiednio zamknięty. Przez zamknięty mam tu na myśli czyszczenie, zwalnianie zasobów oraz sprzątanie po wykonaniu bloku kodu. Dobrym przykładem takiego obiektu, jest użycie open w Pythonie. Korzystając z niego w domyślny sposób, otwieramy plik, odczytujemy pewien jego element, a następnie go zamykamy.
65
proxy
Serwery proxy są swego rodzaju pośrednikiem pomiędzy stroną internetową i osobą, która ją odwiedza, zapewniają anonimowość użytkownikowi. Anonimowość, jaką zyskujemy dzięki serwerom proxy, wynika z faktu, że posiadają one własny numer IP.
66
metoda abstrakcyjna
ma deklarację, ale nie ma implementacji Klasa abstrakcyjna przygowana pod inne klasy, które po niej dziedziczą może zawierać metody abstrakcyjne
67
tupla
thistuple = ("apple", "banana", "cherry") niemutowalna
68
lista wielowymiarowa
lista w liście np. szafka = [[[], [], []], [[], [], []], [[], [], []]]
69
gdzie wydajniej wyszukiwać element w liście, czy w słowniku?
W słowniku wydajniej szukać złożoność obliczeniowa wyszukania elementu w liście N-elementowej: O(N) złożoność obliczeniowa wyszukania elementu w słowniku N-elementowym: O(1) - lepsza!
70
co może być kluczem w słowniku?
Kluczami do słownika mogą być tylko elementy niemutowalne Lista nie może być kluczem. Słownik nie może być kluczem.* *Słownik jest tablicą hashującą, gdzie elementem hashowanym może być jedynie element niemutowalny
71
czy słownik jest typem uporządkowanym?
Jest to zależne od wersji Pythona, którą się posługujemy 2 - 3.5 - słownik nie trzyma kolejności (stosowano tzw. OrderedDict) 3.6 - trzyma kolejność, ale jest to niegwarantowane przez twórców 3.7 - słownik trzyma kolejność (gwarantowane) OrderedDict
72
jak odwrócić listę?
L1 = ['Python', 'Java', 'C#', 'Ruby'] L2= list( reversed (L1) ) L2=L1[::-1] oraz L1.reverse() powyższy sposób nadpisuje pierwotną listę
73
range()
range(start, stop, krok) zwraca sekwencję liczb w podanym zakresie
74
ennumerate()
pobiera sekwencję (np. tuple) i zwraca ponumerowany obiekt dodaje licznik np. x = ('apple', 'banana', 'cherry') y = enumerate(x) > [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
75
min() max()
zwracają największą/najmniejszą wartość jakiejś sekwencji np. listy w stringu zwraca tę literę, która ma najwyższy numer ASCII
76
jak sprawdzić podzielność w Pythonie?
% to dzielenie modulo, które sprawdza resztę z dzielenia dwóch liczb np. 4 % 2 == 0, a 5 % 2 != 0 jeśli wynikiem dzielenia modulo jest 0, to znaczy, że podane liczby podzieliły się całkowicie przez siebie za pomocą modulo możemy też rozróżnić liczby parzyste od nieparzystych
77
argument domyślny
Argument domyślny, zostaje utworzony podczas definiowania funkcji i jest użyty gdy nie podamy innej wartości tego argumentu podczas wywoływania tej funkcji
78
*args **kwargs
napisanie *args jako parametru w nawiasie przy definiowaniu funkcji pozwala potem (przy wywołaniu tej funkcji) przekazywać dowolną (zmienną) liczbę argumentów pozycyjnych napisanie **kwargs jako parametru w nawiasie przy definiowaniu funkcji pozwala potem przekazywać dowolną liczbę argumentów w postaci słów kluczowych
79
keyword arguments
podajemy jako pary nazwa = wartość dzięki czemu nie musimy ich podawać w odpowiedniej kolejności przy wywołaniu funkcji
80
positional arguments
argumenty które podajemy po kolei przy wywołaniu funkcji i gdzie ta kolejność ma znaczenie gdyż nie mają one przypisanych par nazwa = wartość tak jak argumenty w postaci słów kluczowych
81
is, is not ==, !=
is to porównanie identyczności, sprawdza czy wyrażenia po lewej i prawej "is" są identyczne tzn. źe is sprawdza czy ich identyfikatory w pamięci są identyczne, czy badane elementy są tym samym obiektem == to porównanie wartości, , sprawdza czy wyrażenia po lewej i prawej "==" są równe Do sprawdzenia identyfikatora służy polecenie id().
82
[:]
kopiowanie listy
83
globalne lokalne
zmienna globalna jest dostępna dla całego programu Istnieje przez cały czas życia programu i widziana z wielu miejsc w programie. zmienna lokalna (przestaje istnieć po zakończeniu wykonywania funkcji) żyje tylko w bloku kodu, niewielki zasięg
84
jaki blok jest przeznaczony do operacji na plikach
Blok with jest przydatny przy operacjach na plikach, gdyż Python automatycznie zamyka plik po jego opuszczeniu e.g with open('moj_plik.txt', 'r') as f: przeczytaj = f.read() print(przeczytaj)
85
biblioteka random
biblioteka random służy do generowania liczb losowych najbardziej znana funkcja random.randint() losuje dowolne liczny w podanym w nawiasie zakresie Jeśli chcemy kilka tych liczb random.randint() łączymy z funkcją range()
85
biblioteka random
biblioteka random służy do generowania liczb losowych najbardziej znana funkcja random.randint() losuje dowolne liczny w podanym w nawiasie zakresie Jeśli chcemy kilka tych liczb random.randint() łączymy z funkcją range()
86
metody importowania
MODUŁY 1. importujemy moduł: import module aby użyć znajdujących się w nim funkcji używamy : module.function() 2. importujemy wszystkie funkcje z danego modułu: from module import * 3. importujemy tylko wybrane funkcje z modułu: from module import function1, function3 PAKIETY: import package.module package.module.function() UWAGA Nie możemy importować do kodu całego pakietu, bez wyszczególnienia jakie moduły nas interesują e.g gdy mamy pakiet muzyka i moduły instrumenty to: import muzyka.trabka import muzyka.perkusja muzyka.trabka.graj() muzyka.perkusja.graj() inne sposoby obejmują np. używanie aliasów
87
map()
map(funkcja,sekwencja) kolejne elementy z sekwencji przekazane są do funkcji (lambdy) która wykonuje się dla każdego elementu i dołącza wynik do nowej sekwencji e.g lista = ['jan kot', 'ANNA KRÓL', 'jÓzef BYK'] map(lambda x: x.lower().title(), lista)
88
filter()
filter(funkcja,sekwencja) elementy z listy są przekazywane do funkcji lambda, która wyrzuca True lub False, jeśli True element jest dołączany do nowej listy e.g lista = ['jan kot', 18, 'ANNA KRÓL', 'jÓzef BYK', 90] filter(lambda x:type(x) is str, lista)
89
assert
ASERCJA - uznanie danego zdania za prawdziwe słowo kluczowe assert sprawdza, czy to co się za nim znajduje jest prawdą jest używane w testach
90
class SwinkaMorska(ZwierzeLadowe, ZwierzeMorskie): pass Która klasa ma priorytet, jeśli w dwóch znajdą się te same metody?
ZwierzeLadowe czyli ta która jest podana jako pierwsza w nawiasie
91
@staticmethod
metoda statyczna nie jest świadoma bycia częścią klasy a wiec nie widzi innych metod tej klasy, nie potrzebuje nic pobierać z tej klasy, aby działać to, że ta metoda należy do klasy jest jedynie kwestią organizacji kodu i wywołujemy ją przez Klasa.metoda() e.g class Matematyka .... @staticmethod def dodaj(a, b): return a + b
92
@classmethod
metoda klasowa jest swiadoma bycia czescia klasy i widzi inne metody w klasie wymaga slowa kluczowego cls (zamiast self) bo operuje na klasie a nie na jej obiekcie/instancji e.g class Matematyka .... @classmethod def dodaj_i_pomnoz(cls,a,b): return cls.dodaj(a,b) * 2
93
Big O
Złożoność obliczeniową w programowaniu określa się notacją, która powszechnie nazywana jest Big O. Nazwa wzięła się stąd, że jest ona zapisywana jako O(wartość). Mówi ona o tym, ile operacji będzie musiał wykonać komputer,aby dany algorytm zakończył swoją pracę na zbiorze o rozmiarze n. eg. jeśli naszym zbiorem jest lista 10-cio elementowa to zapis O(n) będzie mówił, że komputer będzie musiał wykonać 10 operacji. Zapis O(n**2) będzie mówił, że komputer będzie musiał wykonać 100 operacji. Zapis O(2**n) będzie mówił, że komputer będzie musiał wykonać 2^10 operacji.
94
dir()
dir(obiekt) - wyświetla listę atrybutów danego obiektu
95
help()
help() - wpisane w linię komend spowoduje otwarcie interaktywnego menu helpa help(obiekt.metoda) - wyświetla opis danego atrybutu obiektu
96
Najważniejsze cechy Pythona
ZALETY: Prosta składnia (brak nawiasów klamrowych {}) Python jest językiem interpretowanym, nie kompilowanym Dynamicznie typowany (rozpoznaje typ zmiennych) WADY: ie jest to szybki język. Aby poradzić sobie z "wąskimi gardłami" stosuje się wstawki z C. Niektórzy programiści narzekają na brak statycznego typowania i na system wcięć zamiast {}. (od tego są inne języki)
97
The Zen of Python
import this
98
set()
Przegląda zawartość i zapisuje tylko unikalne wartości
99
Agregacja w statystyce/DJANGO Wyrażenia agregujące w DJANGO
W Django to generowanie wartości podsumowujące dla całego QuerySet. e.g from django.db.models import Avg Book.objects..aggregate(Avg('price')) Wyrażenie agregujące jest szczególnym przypadkiem wyrażenia Func(), które informuje zapytanie, że wymagana jest klauzula GROUP BY. Wszystkie funkcje agregujące, takie jak Sum() i Count(), dziedziczą po Aggregate(). Ogólnie w statystyce: agregacja danych polega na wyliczeniu jednej lub wielu statystyk, takich jak średnia arytmetyczna (najczęstszy przypadek), minimum, maksimum itp., dla grup obserwacji wyznaczonych przez kategorie zmiennych grupujących. W wyniku tej procedury powstaje nowa macierz danych, w której jedna obserwacja odpowiada jednej kategorii zmiennej grupującej, a wartości zmiennych są zastąpione wyliczonymi wartościami przyjętej statystyki dla poszczególnych grup.
100
OOP
Programowanie zorientowane obiektowo (ang. Object-oriented Programming) to paradygmat programowania, który wykorzystuje klasy oraz obiekty. Główną koncepcją OOP jest powiązanie danych (przechowywanych w klasach) oraz metod (zachowań). Jej celem jest implementacja rzeczywistych zjawisk takich jak dziedziczenie (inheritance), polimorfizm (polymorphism), czy enkapsulacja (encapsulation). Główne koncepty OOP: Class Objects Polymorphism Encapsulation Inheritance Data Abstraction
101
Association (OOP)
Association between two objects basically means that they are connected in some way Association may be done by: - composition when one object is composed of another one - aggregation when one object contains another object --------------------------------------------------------------- -------------------------------------------------------------- PRZYKŁADY: Kompozycja (rodzaj asocjacji): Obiekt dom jest skomponowany z sypialni, łazienki i kuchni. Kiedy dom spłonie i przestanie istnieć, to sypialnia, łazienka i kuchnia również przestaną istnieć. Agregacja (rodzaj asocjacji): Obiekt para zawiera osobę 1 i osobę 2. Jeśli para się rozejdzie to osoba 1 i osoba 2 nie przestaną istnieć. Oba rodzaje asocjacji przedstawia się na diagramach UML: ASOCJACJA połączenie w postaci kreski KOMPOZYCJA zamknięty romb AGREGACJA otwarty romb
102
Enkapsulacja/hermetyzacja (OOP)
Enkapsulacja (Hermetyzacja) – jest jedną z podstawowych koncepcji programowania obiektowego (OOP). Opisuje ideę grupowania danych, wraz z metodami operującymi na tych danych w ramach jednej jednostki. Wiele języków programowania (np. Python, Java) często stosuje hermetyzację w postaci klas. Klasa jest dobrym przykładem hermetyzacji, ponieważ składa się z danych i metod połączonych w jedną jednostkę. Enkapsulacja może również odnosić się do mechanizmu ograniczania bezpośredniego dostępu do niektórych komponentów obiektu. Hermetyzacja w programowaniu pozwala nam ukryć dane oraz logikę biznesową przed użytkownikiem. Użytkownik jest w stanie wyciągać dane lub je zmieniać tylko za pomocą ściśle określonych mechanizmów jakimi są zachowania czyli metody, gettery oraz setery. Spójrzmy na przykład konta bankowego, w którym nie stosujemy hermetyzacji.
103
Abstrakcja (OOP)
sposób opisywania obiektu na różne sposoby w zależności od kontekstu. Często jest to uproszczenie pewnych rzeczy poprzez usunięcie informacji, które nie są niezbędne do ich zrozumienia. Np. pokazujemy użytkownikowi tylko funkcjonalności za pomocą ukrywania lub pomijania innych szczegółów implementacji (wydobywamy informacje, które są konieczne w danej chwili. Np. gdy szukamy z kimś samochodu na parkingu to podajemy jego kolor i markę, a nie przebieg Cechą abstrakcji jest WIELOWARSTWOWOŚĆ: Abstrakcje mogą posiadać wiele poziomów. W naszym przypadku pierwszym poziomem abstrakcji jest samochód, natomiast drugim może być silnik, który wprawia go w ruch czy układ skrętny, który pozwala zmieniać kierunek jazdy. Poziomów abstrakcji jest nieskończenie wiele. Skoro już mamy pogląd na to czym jest abstrakcja skupmy się teraz na użyciu jej w programowaniu. Abstrakcje opisują zachowania naszych modułów, klas, metod czy też funkcji. Weźmy za przykład klasę odpowiedzialną za wysyłkę wiadomości email. W przypadku tej klasy abstrakcją może być klasa abstrakcyjna lub interfejs. Wykorzystując je jesteśmy w stanie określić jakie metody ma posiadać nasza klasa bez informacji o tym jak dokładnie mają zostać zaimplementowane. Jedyne co będziemy znać to nazwy tych metod, przyjmowane przez nie argumenty i zwracane dane.
104
Polimorfizm (OOP)
Polimorfizm to inaczej występowanie danej rzeczy pod różnymi postaciami, które mogą się różnić zachowaniem. W programowaniu sytuacja wygląda podobnie. Możemy posiadać wiele klas i obiektów, które będą posiadać takie same zachowania (będą udostępniać takie same funkcjonalności), ale będą różnić się od siebie implementacją (czyli tym w jaki sposób wykonują daną rzecz). Dzięki temu możemy używać ich zamiennie. W programowaniu mamy wiele narzędzi, które pozwalają nam uzyskać polimorfizm.
105
Dziedziczenie (OO)P)
Dziedziczenie jest mechanizmem, w którym jedna klasa nabywa własności (właściwości i metody) innej klasy po której dziedziczy. Dzięki dziedziczeniu możemy ponownie wykorzystać pola i metody istniejącej klasy bez konieczności ich ponownej implementacji. W programowaniu ten mechanizm wygląda podobnie. Klasa po której dziedziczymy często jest nazywana super klasą, lub klasą rodzicem. Natomiast klasa, która dziedziczy po super klasie często jest nazywana subklasą lub klasą dzieckiem. Możemy dziedziczyć metody oraz właściwości po naszej klasie bazowej, dzięki czemu nie jesteśmy zmuszeni do ich ponownej implementacji. Co więcej możemy je również rozszerzać oraz zmieniać (jednak nie jest to polecane robić bo łamie to jedną z zasad SOLID).
106
Problem n+1 zapytań
Problem N+1 to antywzorzec wydajnościowy, w którym aplikacja masowo przesyła do bazy danych N+1 małych zapytań o dane z powiązanych tabel, zamiast wysłać jedno zapytanie, które zwróci wszystkie potrzebne dane.
107
Anotacje w Django Anotacje w Pythonie
W DJANGO W Django adnotacje to sposób na wzbogacenie obiektów zwracanych w QuerySets. Oznacza to, że kiedy uruchamiasz zapytania dotyczące swoich modeli, możesz poprosić o dodanie nowych pól, których wartości będą obliczane dynamicznie, podczas oceny zapytania. W PYTHONIE Adnotacje zostały wprowadzone w Pythonie 3.0 Adnotacje dodajemy do argumentów oraz wartości zwracanych funkcji w celach informacyjnych. Można je też dodać do elementów klasy. Adnotacja musi być prawidłowym wyrażeniem Pythona. Na początku w PEP 484 pojawiła się informacja o tym w jaki spośób dodawać adnotacje typów (type hints) do kodu: Adnotacje typów (ang. type hints) -> ”int” -> 'list' Adnotacje funkcji (mówią to co zwraca ta funkcja) -> return_type: -> float: Adnotacje argumentów def func( arg: arg_type, optarg: arg_type = default) -> return_type: ... w powyższym przykładzie syntax to argument: annotation, czyli adnotacje to arg_type i arg_type = default Możemy sprawdzić adnotację w swoim kodzie za pomocą atrybutu: .__annotations__ Np. import math def circumference(radius: float) -> float: return 2 * math.pi * radius circumference.__annotations__ > {'radius': , 'return': } circumference(1) >6.284
108
Wyrażenia Q
WYRAŻENIA Q W Django obiekty Q są wykorzystywane do tworzenia bardziej skomplikowanych zapytań do baz danych. Obiekt Q (django.db.models.Q) to obiekt używany do enkapsulacji kolekcji argumentów słów kluczowych.
109
Wyrażenia F
W Django sposób na tworzenie bardziej skomplikowanych zapytań. Obiekt F( ) z klasy F reprezentuje: - wartość zmiennej modelu, - przekształconą wartość zmiennej modelu - kolumnę z adnotacjami Wyrażenie F umożliwia odnoszenie się do wartości pól i przeprowadzanie operacji na danych z bazy bez konieczności wyciągania ich z bazy danych do pamięci. Django używa obiektu F() do generowania wyrażenia SQL.
110
Serializacja
Proces konwersji obiektu do specjalnego formatu, który jest odpowiedni do przesyłania przez sieć lub przechowywania w pliku lub bazie danych converting a Python object into a JSON format - dump() e.g import json person = { .... } with open('person.json', 'w') as f: json.dump(person, f) *dumps() function works exactly like dump() but instead of sending the output to a file-like object, it returns the output as a string.
111
Deserializacja
Jest to odwrotność serializacji. Konwertuje specjalny format zwrócony przez serializację z powrotem na użyteczny obiekt converting back from JSON to python - load() e.g import json with open('absolute path', 'r') as f: json = json.load(f) lub json_file = open('users.json') json = json.load(json_file)