Python (VŠCHT – ZS 2023/2024)
Jiří tečka Znamenáček plus PYT zavináč gmail tečka com

http://studuj.bioinformatiku.cz
PS: Na obdobný předmět BI-PYT volně navazuje předmět MI-PYT zaměřený na praktické aplikace Python'u, jako jsou webové aplikace, testování, dokumentace a distribuce modulů, zpracování dat, tvorba GUI, matematické a jiné náročné výpočty.

Pomůcky

Python 3.x
~ přehled Python'u 3.x
~ tahák pro Python 3.x
~ základní programové konstrukce pro Python 3.x
~ PyPI aka Python CheeseShop (repozitář balíčků pro pip)

IDEs
~ PyCharm – pythoní IDE v Javě (multiplatformní)
~ Jupyter – webový notebook
~ DreamPie – pythoní shell s víceřádkovou historií
~ PyScripter – pythoní IDE s integrovaným debugerem (pro Windows)

Další nástroje
~ kiki-re – vizualizátor regexpů
~ Git – DVCS
~ Mercurial (hg) – DVCS

Příklady z hodin

  1. 2023-09-22:
    • Pro nemoc odpadá :-(
  2. 2023-09-29:
    • Pro nemoc odpadá :-(
  3. 2023-10-06:
  4. 2023-10-13:
  5. 2023-10-20:
  6. 2023-10-27:
    • Hodina odpadá!
  7. 2023-11-03:
  8. 2023-11-10:
  9. 2023-11-17:
    • Státní svátek, hodina pochopitelně není.
  10. 2023-11-22:
  11. 2023-11-24:
    • Běžná hodina odpadá, VŠCHT má DOD.
  12. 2023-12-01:
  13. 2023-12-08:
  14. 2023-12-15:
  15. 2023-12-22:
    • ...

Příklady

  1. řešené: rozcvička
  2. řešené: typy – čísla
              ~ typy – řetězce
    cvičení: hrátky s „printem“ (úlohy 1-4)
  3. cvičení: parsování textových souborů (úlohy 1-4)
  4. řešené: typy – seznamy
    cvičení: příklady na čísla (úlohy 1-2, případně i 3)
  5. cvičení: hrátky s čísly
  6. řešené: funkce
    cvičení: formáty FASTA a FASTQ
  7. řešené: generátory (úlohy 1, 3 a 5)
              ~ dekorátory
    cvičení: náhoda a pravděpodobnost (úloha 1)
  8. řešené: typy – slovníky
              ~ typy – množiny
              ~ výjimky
    cvičení: hustota obyvatelstva
  9. řešené: iterátory (úlohy 2, 4 a 6)
    cvičení: ...
  10. řešené (grafický formát PNM):
            ~ šachovnice
            ~ barevné přechody
    cvičení: problémy pro PNM
  11. jazyk brainfuck a jeho grafické varianty:
            ~ přehled
            ~ základy programování
  12. Numpy: základní grafické operace
                ~ korelační/konvoluční filtry (zvýrazňování hran, ostření)
                ~ steganografie

Domácí úkoly

Nenechávejte si je na poslední chvíli – nebudete stíhat a ještě budete zbytečně bez bodů ^_~

Přednášky

  1. úvodní slovo (Python, Numpy, BDFL, PEPs…)
  2. Python prakticky:
         ~ instalační kuchařka (pro úplné začátečníky)
         ~ jak pracovat s vícero Python'y na jednom systému
         ~ virtuální prostředí: úvod & modul venv
         ~ balíčky prakticky: pip a wheel
         ~ externí nejen balíčkovací systém Conda:
    1. Conda – Víc než Python?
    2. základy práce s Condou (připravil Jiří Novotný)
    PS 1: dokumentační řetězce a dokumentační testy
    PS 2: modulová kuchařka (pro začátečníky)
  3. základní řídicí konstrukce
    typy:
         ~ čísla
         ~ řetězce
    k textům:
         ~ kódování textů & Unicode
         ~ hrátky s printem
  4. typy:
         ~ n-tice (tuples) & pojmenované n-tice
         ~ Boolean (a priority operátorů)
         ~ seznamy & číselná typovaná pole array
    funkce:
         ~ základy
         ~ argumenty / parametry (důležité!)
         ~ viditelnost proměnných
         ~ funkce jako „first-class citizen
  5. zpracování chyb – výjimky
    typy:
         ~ slovníky (& slovníky s výchozími hodnotami collections.defaultdict)
         ~ množiny a „zmražené“ množiny
    základy řazení
    souborová kuchařka aneb „Jak číst/psát ze/do souboru“
  6. funkce:
         ~ generátory (a generátorové výrazy)
         ~ uzávěry, lambda-funkce…
         ~ dekorátory (aplikace uzávěrů)
    nejen typové anotace:
         ~ anotace funkcí
         ~ anotace proměnných a objektů
         ~ modul typing
         ~ projekt Mypy
  7. serializace datových struktur:
         ~ základy
         ~ moduly pickle (včetně pickletools)

    PS – rekurzivní funkce a memoizace:
         ~ rekurzivní algoritmy a jejich náročnost
         ~ technika memoizace
  8. některé aplikace tříd:
         ~ iterátory
         ~ třídění a porovnávání
         ~ kontextový manažer with
    třídy:
         ~ úvod
         ~ magické metody
         ~ protokol deskriptorů
         ~ introspekce
    PS: „Úvod do tříd pro ne-OOP-programátory“
  9. důležitá přednáška o modulech v Python'u
    typy:
         ~ bajtový řetězec (binární data neproměnná)
         ~ bajtová pole (binární data proměnná)
    práce se soubory:
         ~ přehled (více o binárních a textových souborech)
         ~ práce s velkými soubory pomocí mmap
         ~ modul pathlib
         ~ modul tempfile
  10. grafika:
         ~ formát PNG
         ~ formát PNM
         ~ třída PhotoImage (GIF, PNM)
    modul struct
  11. Numpy:
         ~ úvod
         ~ tvorba a vlastnosti polí
         ~ základní operace
         ~ „broadcasting“
         ~ výřezy, optimalizace

    PS k Numpy: rozšířená výřezová notace
    knihovna Pillow
    zrychlování kódu:
         ~ přehled
         ~ Numba [TODO @(gu)vectorize]
         ~ viz Cython
         ~ příklad – filtrace obrázků
  12. Pandas:
         ~ ...
  13. testování kódu:
         ~ úvod
         ~ doc-testy aneb O smysluplnosti docstringů
         ~ unit-testy
    ladění kódu:
         ~ modul timeit
         ~ moduly cProfile a pstats
         ~ odbroukovávače pdb (interní) a pudb3 (externí)
  14. Python a SQLite
    regexpy v Python'u
    kreslení grafů pomocí externí knihovny matplotlib:
         ~ úvod a přehled
         ~ animace (základy)
    uživatelský vstup:
         ~ input() a sys.argv (plus getopt a optparse)
         ~ modul argparse [TODO subcommands a 3.3+]
  15. interakce s prostředím:
         ~ os.system(), subprocess [TODO]
         ~ FFI: přehled, poznámky k vybraným jazykům, modul ctypes
         ~ Cython: přehled, úvod

Přednášky PLUS

Zápočet

Zápočet bude udělen za úspěšně odevzdané domácí úkoly.

Zkouška

Zkoušku pořešíme po vánocích podle toho, kolik z vás a z jakých oborů ji bude chtít skládat.