programowanie2

 0    34 fiche    kacperkamin
Télécharger mP3 Imprimer jouer consultez
 
question język polski réponse język polski
Python proces wykonywania
commencer à apprendre
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
Bajtkod
commencer à apprendre
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,
commencer à apprendre
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.
threading
commencer à apprendre
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)
commencer à apprendre
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)
commencer à apprendre
Ochrona Sekcji Krytycznej (zapobieganie Race Conditions).
Semaphore
commencer à apprendre
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.
Queue
commencer à apprendre
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.
Generics
commencer à apprendre
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.
TypeVar
commencer à apprendre
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.
List[T]
commencer à apprendre
Adnotacja oznaczająca homogeniczną listę elementów typu T. W Pythonie 3.9+ zastępowana przez list[T]
Dict[K, V]
commencer à apprendre
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.
id() - is
commencer à apprendre
id(<zmienna>) zwraca identyfikator obiektu, na który wskazuje <zmienna>. Pozwala to na sprawdzenie czy 2 różne zmienne wskazują na ten sam obiekt.
Płytka Kopia
commencer à apprendre
Tworzy nowy kontener, ale wypełnia go starami referencjami do dzieci
Głęboka Kopia
commencer à apprendre
Tworzy nowy kontener i rekurencyjnie nowe kopie wszystkich dzieci.
semantyka kopiowania
commencer à apprendre
Przypisanie (=), Płytka Kopia (copy. copy(), [:]), Głęboka Kopia (copy. deepcopy())
Hermetyzacja w Pythonie (Encapsulation)
commencer à apprendre
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
_zmienna
commencer à apprendre
Oznacza atrybut chroniony (umownie). Technicznie jest publiczny, ale sygnalizuje programiście: "nie dotykaj spoza klasy"
__zmienna
commencer à apprendre
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
@property
commencer à apprendre
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
Unie (union)
commencer à apprendre
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.
Enumeracje (enum)
commencer à apprendre
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++).
List (Lista)
commencer à apprendre
Uporządkowana, zmienna (mutable) kolekcja elementów. Pozwala na duplikaty. Zapis: [1, 2, 2, 3] Cechy: Dostęp przez indeks, dynamiczny rozmiar, bardzo uniwersalna.
Tuple (Krotka)
commencer à apprendre
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.
Set (Zbiór)
commencer à apprendre
Nieuporządkowana kolekcja unikalnych elementów. Zapis: {1, 2, 3} Cechy: Automatycznie usuwa duplikaty. Bardzo szybkie sprawdzanie przynależności (operator in).
Operatory na kolekcjach
commencer à apprendre
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).
std: function
commencer à apprendre
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
commencer à apprendre
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).
Bufory i Pule pamięci
commencer à apprendre
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.
memset
commencer à apprendre
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.
memcpy i memmove memcpy
commencer à apprendre
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).
Garbage Collector (GC)
commencer à apprendre
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.
Przeciążanie operatorów
commencer à apprendre
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)
commencer à apprendre
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.

Vous devez vous connecter pour poster un commentaire.