kérdés |
válasz |
Python proces wykonywania kezdjen tanulni
|
|
1) Analiza pod względem błędów, tłumaczenie na bajtkod 2) Maszyna wirtualna Python, pętla prog: 1) wczyt instr bajtkod, wykonuje instr w C, zarzadza stosem
|
|
|
|
kezdjen tanulni
|
|
Jest to zestaw instrukcji dla Maszyny Wirtualnej, a nie dla fizycznego procesora (CPU). Nazwa pochodzi stąd, że każda instrukcja (opcode) zajmowała tradycyjnie jeden bajt (choć w nowszych wersjach Pythona się to zmienia)
|
|
|
Interpreter W kontekście Pythona, kezdjen tanulni
|
|
zawiera w sobie zarówno kompilator do bajtkodu, jak i Maszynę Wirtualną (PVM). Jego zadaniem jest emulacja komputera – udaje procesor, który rozumie język bajtkodu Pythona.
|
|
|
|
kezdjen tanulni
|
|
udostępnia interfejs wysokopoziomowy do pracy z wątkami. Kluczowa cecha implementacyjna: Wątki w Pythonie są natywnymi wątkami systemu operacyjnego
|
|
|
GIL (Global Interpreter Lock) kezdjen tanulni
|
|
mutex (blokada wzajemnego wykluczania), wbudowany w rdzeń interpretera CPython, Aby jakikolwiek wątek mógł wykonać instrukcję bajtkodu Pythona lub operować na obiektach Pythona, musi najpierw uzyskać (zablokować) GIL
|
|
|
Lock (Blokada Wzajemnego Wykluczania) kezdjen tanulni
|
|
Ochrona Sekcji Krytycznej (zapobieganie Race Conditions).
|
|
|
|
kezdjen tanulni
|
|
Semafor to licznik sterujący dostępem do zasobów. Pozwala określonej liczbie wątków na jednoczesną pracę. wait() (P) zmniejsza licznik, signal() (V) go zwiększa. Gdy licznik wynosi 0, wątek czeka. Idealny do puli połączeń lub ograniczania obciążenia.
|
|
|
|
kezdjen tanulni
|
|
queue. Queue to bezpieczny wątkowo kanał komunikacji w Pythonie. Pozwala na bezpieczne przesyłanie danych między wątkami bez ręcznych blokad (Lock). Obsługuje mechanizm blokujący: get() czeka na dane, a put() może czekać na wolne miejsce.
|
|
|
|
kezdjen tanulni
|
|
Mechanizm polimorfizmu parametrycznego umożliwiający tworzenie kodu (klas/funkcji) działającego na różnych typach danych, z zachowaniem bezpieczeństwa typów podczas analizy statycznej.
|
|
|
|
kezdjen tanulni
|
|
TypeVar to zmienna typologiczna używana do tworzenia generyków w Pythonie. Pozwala powiązać typy (np. zapewnić, że funkcja zwróci ten sam typ, który otrzymała). Umożliwia ograniczanie dopuszczalnych typów za pomocą argumentów lub parametru bound.
|
|
|
|
kezdjen tanulni
|
|
Adnotacja oznaczająca homogeniczną listę elementów typu T. W Pythonie 3.9+ zastępowana przez list[T]
|
|
|
|
kezdjen tanulni
|
|
Dict[K, V] to podpowiedź typu (type hint) dla słownika. K określa typ klucza, a V typ wartości. Od Pythona 3.9 zaleca się zapis dict[K, V]. Pomaga w autouzupełnianiu kodu i pozwala na szybsze wykrywanie błędów przez analizatory.
|
|
|
|
kezdjen tanulni
|
|
id(<zmienna>) zwraca identyfikator obiektu, na który wskazuje <zmienna>. Pozwala to na sprawdzenie czy 2 różne zmienne wskazują na ten sam obiekt.
|
|
|
|
kezdjen tanulni
|
|
Tworzy nowy kontener, ale wypełnia go starami referencjami do dzieci
|
|
|
|
kezdjen tanulni
|
|
Tworzy nowy kontener i rekurencyjnie nowe kopie wszystkich dzieci.
|
|
|
|
kezdjen tanulni
|
|
Przypisanie (=), Płytka Kopia (copy. copy(), [:]), Głęboka Kopia (copy. deepcopy())
|
|
|
Hermetyzacja w Pythonie (Encapsulation) kezdjen tanulni
|
|
Brak słów kluczowych private/protected. Ochrona opiera się wyłącznie na konwencji (_name) oraz mechanizmie Name Mangling (__name)(trudniej nadpisac), a nie na blokadzie dostępu
|
|
|
|
kezdjen tanulni
|
|
Oznacza atrybut chroniony (umownie). Technicznie jest publiczny, ale sygnalizuje programiście: "nie dotykaj spoza klasy"
|
|
|
|
kezdjen tanulni
|
|
Uruchamia mechanizm Name Mangling. Interpreter zmienia nazwę na _Klasa__zmienna w czasie kompilacji. Służy do unikania kolizji nazw przy dziedziczeniu, a nie do bezpieczeństwa danych
|
|
|
|
kezdjen tanulni
|
|
mplementacja Protokołu Deskryptora. Pozwala zamienić metody (getter/setter) na atrybuty dostępne przez kropkę (obj.x), zachowując kompatybilność API bez zmiany kodu klienta
|
|
|
|
kezdjen tanulni
|
|
Specjalny typ, w którym wszystkie pola dzielą ten sam obszar pamięci. Rozmiar: Równy największemu polu. W danej chwili można przechowywać tylko jedną wartość. Zastosowanie: Oszczędność pamięci lub dostęp do tych samych danych na różne sposoby.
|
|
|
|
kezdjen tanulni
|
|
Typ wyliczeniowy przypisujący nazwy (symbole) do liczb całkowitych. Przykład: enum Kolor {RED, GREEN, BLUE}; (domyślnie 0, 1, 2). Zaleta: Poprawa czytelności kodu i bezpieczeństwo typów (zwłaszcza enum class w nowoczesnym C++).
|
|
|
|
kezdjen tanulni
|
|
Uporządkowana, zmienna (mutable) kolekcja elementów. Pozwala na duplikaty. Zapis: [1, 2, 2, 3] Cechy: Dostęp przez indeks, dynamiczny rozmiar, bardzo uniwersalna.
|
|
|
|
kezdjen tanulni
|
|
Uporządkowana, niezmienna (immutable) kolekcja. Pozwala na duplikaty. Zapis: (1, 2, 2, 3) Cechy: Szybsza od listy, bezpieczniejsza (brak zmian), może być kluczem w słowniku.
|
|
|
|
kezdjen tanulni
|
|
Nieuporządkowana kolekcja unikalnych elementów. Zapis: {1, 2, 3} Cechy: Automatycznie usuwa duplikaty. Bardzo szybkie sprawdzanie przynależności (operator in).
|
|
|
|
kezdjen tanulni
|
|
in, not in: sprawdzenie czy element jest w kolekcji. +: łączenie list/krotek. *: powielanie kolekcji (np. [0] * 3 -> [0, 0, 0]). ==: sprawdzenie czy kolekcje mają tę samą zawartość. is: sprawdzenie identyczności (ten sam obiekt).
|
|
|
|
kezdjen tanulni
|
|
Polimorficzny opakowywacz (wrapper) na wszystko, co można wywołać: zwykłe funkcje, lambdy, funktory. Składnia: std: function<typ_zwracany(argumenty)>. Zastosowanie: Pozwala przechowywać różne obiekty funkcyjne w jednej zmiennej/kontenerze.
|
|
|
Relacja: Lambda a std: function kezdjen tanulni
|
|
Lambda to konkretny obiekt o nieznanym typie wygenerowany przez kompilator. std: function to kontener, który może tę lambdę przechować, ale wiąże się to z niewielkim narzutem wydajnościowym (dynamiczna alokacja).
|
|
|
|
kezdjen tanulni
|
|
Bufor: tymczasowy obszar RAM do przechowywania danych w przesyle. Pula (Pool): wstępnie zaalokowany blok pamięci, z którego program sam wydziela małe porcje. Zaleta: Szybsze działanie i brak fragmentacji RAM niż przy ciągłym new/malloc.
|
|
|
|
kezdjen tanulni
|
|
Funkcja wypełniająca blok pamięci określoną wartością (bajt po bajcie). Użycie: memset(ptr, 0, sizeof(ptr)). Zastosowanie: Najszybszy sposób na "wyzerowanie" tablicy lub struktury zaraz po jej utworzeniu.
|
|
|
|
kezdjen tanulni
|
|
kopiuje blok danych z adresu A do B. Bardzo szybka, ale niebezpieczna, gdy obszary na siebie nachodzą. memmove: bezpieczniejsza wersja, która radzi sobie z nachodzącymi na siebie obszarami pamięci (używa bufora pomocniczego).
|
|
|
|
kezdjen tanulni
|
|
Mechanizm automatycznego zwalniania pamięci zajmowanej przez obiekty, które nie są już używane przez program. Zaleta: Zapobiega wyciekom pamięci (memory leaks). Wada: Może powodować nagłe, krótkie pauzy w działaniu programu.
|
|
|
|
kezdjen tanulni
|
|
Zasady Pozwala definiować działanie operatorów dla własnych typów. Ograniczenia: Nie można tworzyć nowych symboli (np. **), zmieniać priorytetów ani liczby argumentów. Przynajmniej jeden argument musi być typem użytkownika.
|
|
|
Adnotacje typów (Type Hints) kezdjen tanulni
|
|
Opcjonalne deklaracje typów: zmienna: typ = wartosc. Zasada: Ignorowane przez interpreter Pythona, ale używane przez IDE i analizatory (np. mypy) do wykrywania błędów przed startem. Zwiększają czytelność kodu.
|
|
|