Pyenv a REPL

Odpřednášena v pátek 4. 9.

Byl zde zadán #U1

Představili jsme si různé části vývojového prostředí a rozjeli jsme pyenv a VS Code.

Vývojové prostředí

K programování je samozřejmě potřeba mít něco, co bude schopno náš program spustit (pro zvídavé konkrétně kompilátor či interpeter), a nějaký textový editor, ve kterém náš program budeme psát.

Na vysoké škole a zvláště pak v zaměstnání však musí každý programátor používat i různé pomocné nástroje, které — ač se to třeba zpočátku může zdát jinak — mu nakonec ulehčí práci. Mezi nimi jsou hlavní:

  • linter: ještě před spuštěním programu se v něm linter pokusí najít stylistické i programovací chyby
  • formatter: formátuje kód tak, aby odpovídal nějakým stylovým standartům
    • pro Python například black nebo yapf (yet another Python formatter)
  • project manager:
    • pro Python je jeden z nejlepších poetry
  • version control system: ukládá pro každý soubor v projektu jeho verze, takže se můžete jednoduše vrátit k přechozímu stavu projektu
    • standartně se používá git, více informací příští přednášku

Většina z těchto nástrojů nás ještě čeká, už jsme se ale seznámili s pyenv (respektive s jeho verzí pro Windows pyenv-win), což je program, který spravuje verze Pythonu.

Pyenv

Často se stává, že při práci na více projektech budete pro každý projekt potřebovat jinou verzi Pythonu, většinou proto, že ten projekt napsal někdo před vámi a teď se už nikomu nechce migrovat na novější verzi, když to s tou starou funguje.

Pyenv řeší přesně tento problém: pomocí pyenv install X lze nainstalovat libovolnou verzi Pythonu a pomocí pyenv global X ji následně i aktivovat. To vám dovolí rychle a jednoduše přepínat mezi libovolným množstvím verzí Pythonu v závislosti na tom, na kterém projektu budete zrovna pracovat.

REPL

Do teď jste všechny své Pythonovské programy spouštěli "v kuse": do souboru jste napsali nějaký kód a celý tento soubor jste následně spustili na příkazové řádce. Někdy se ale hodí moci pouze načíst celý váš soubor a spouštět každou funkci zvlášť, ručně, s jakýmkoli vstupem si zamanete — například, pokud danou funkci chcete otestovat.

Jak používat REPL ve VS Code

Toto si zkusíme i příští hodinu, takže pokud něco nedává smysl, nezoufejte. Pro ty z vás, kteří by se s REPLem chtěli více seznámit už doma:

  1. Ve VS Code: Ctrl+Shift+P > REPL > příkaz Python: Start REPL
  2. Otevře se okno terminálu s nastartovaným REPL
  3. V REPL můžete napsat jakýkoli Pythonovský kód a pomocí Enter ho spustit, popřípadě můžete načíst všechny definované věci (funkce, proměnné) ze svého souboru pomocí from my_file import *. Pak je už můžete v REPL normálně používat.

REPL lze navíc spustit i online, a to na stránce repl.it. Na výběr je REPL pro více jazyků, vám se asi nejvíce bude hodit to pro Python.

VS Code

Pokud máte rádi klávesové zkratky, zde je celkem užitečný cheat sheet. Já nějčastěji používám:

  • Ctrl+N pro vytvoření nového souboru
  • Ctrl+B pro zobrazení/skrytí bočního panelu
  • Ctrl+J pro zobrazení/skrytí spodního panelu
  • Ctrl+P pro ryhlý přechod mezi otevřenými soubory
  • Ctrl+Shift+P pro zobrazení příkazové řádky VS Code, kde lze vyhledávat všechny možné příkazy (i ty tři, které jsem popsal výše) — tak se mimochodem dají objevovat nové klávesové zkratky

Závěrečný program

V poslední půlhodince jsme řešili následující úlohu: Napište funkci, která na vstupu dostane seznam seznamů čísel a vrátí celkový počet čísel napříč všemy seznamy. Příklad:

IN: [[1, 2, 3], [4, 5]]
OUT: 5

Mé "normální" řešení:

def count(lists):
  total = 0
  for l in lsts:
    total += len(l) # tohle je marginálně lepší, než tu mít druhý for-loop
  return total

Mé řešení, kdybych chtěl flexit:

def count(lists):
  return sum(len(l) for l in lists) # (X for Y in Z) je tzv. list comprehension