Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Ve světě Pythonu byla tato kniha takovým zjevením – namísto nudného výčtu
syntaxe – odsazení, if
, class
, def
, následovaným popisem standardní
knihovny se Mark nijak systematicky o popis standardní knihovny nesnažil.
Syntaxí a obvyklými obraty se nikterak nezatěžoval a namísto toho se soustředil
na skutečně zajímavé rysy jazyka.
Ponořme se do Pythonu 3 je reedicí prvního, řekněme dílu, přizpůsobeného reáliím nové verze jazyka.
Kniha začíná poměrně netradičně kapitolou -1, což je takový předúvod pro lidi, kteří už o Pythonu už něco vědí a navíc četli původní vydání. Autor uvádí soupis zajímavých témat obsažených v knize, ať je to skript 2to3 pro převod kódu z verze 2 to verze 3, případová studie – přepis knihovny chardet, práce se soubory, protokolem HTTP a tak dále.
Poté následuje už běžná druhá kapitola číslo 0 – Instalujeme Python. Pro uživatele Linuxu nijak nezbytná záležitost, i když kniha obsahuje i popis instalace v Ubuntu a názvy příslušných příkazů pro ostatní *nixy. A také se dozvíme, jak se používá interaktivní shell Pythonu.
Přejděme ke kapitole s tradičnějším číslováním – třetí kapitola číslo 1 (dobrá, od teď přestanu používat pořadová čísla kapitol) je nazvána Váš první pythonovský program. Autor už od počátku používá svůj typický styl – ukázat příklad a ten poté komentovat – tím prvním příkladem je program na převod čísel na lidsky čitelnou velikost (jako to dělají grafické programy, mc, nebo přepínač -h příkazu ls).
Zjistíme, že poměrně krátký, pouze 30 řádkový program ukazuje poměrně dost
základů jazyka – definice základních typů jako slovník a seznam, definice
funkcí, poziční, pojmenované a nepovinné parametry funkcí, konstrukce
__main__
, používání dokumentačních řetězců. Navíc je zmínka o vyhledávacích
cestách příkazu import, o skutečnosti, že prakticky všechno je v Pythonu
objekt, co je to vlastně objekt, nesmí chybět zmínka o odsazování kódu. Poté
se výklad zase vrací k původnímu příkazu debatou o výjimkách, odskočí se na
řešení problémů s importem, citlivost na velikost písmen a poté už následuje
seznam dalších zdrojů, jako například PEP 257: Documentation string conventions.
Další kapitola se věnuje datovým typům – i když se to nezdá, tak Python 3
disponuje pěknou řádkou zabudovaných typů – autor vynechává specialitky typu
buffer/memoryview
a zaměřuje se na ty běžné, jako jsou pravdivostní
hodnoty, čísla, řetězce, bajty a pole bajtů, seznam, n-tice, množina a slovník.
A na to, jaký syntaktický cukr Python nabízí pro jejich tvorbu a používání.
U pravdivostních hodnot se zmiňuje o tak zvaném booleovském kontextu (osobně
bych dal přednost termínu pravdivostní) – čili, že jiný datový typ může
vystupovat namísto svého typu jako právě pravdivostní hodnota – například
prázdný seznam/množina/slovník se v podmínce if
vyhodnocuje jako nepravda.
Kapitola číslo 3 je pojmenována Generátorová notace a je celá věnována onomu
comprehensions a je tak vlastně rozšířením předchozí kapitoly. Notace je
stručný předpis, kterým se v Pythonu vytváří seznamy, slovníky a množiny ... a
rovněž generátory. A aby to nebylo tak suchopárné, tak nosným příkladem je zde
práce se soubory a adresáři, takže je zde malá odbočka v podobě osvětlení modulu
os.path
a glob
. Autor ukazuje jak napsat notaci seznamu, jak filtrovat
hodnoty, jak vytvářet seznam n-tic (a obecně seznam libovolných prvků).
Poté pokračuje popisem notace slovníku, kde jsou příkladem opět soubory – nyní se vytváří slovník všech souborů, kde klíčem je název a hodnoty jsou lidsky čitelné velikosti daných souborů. Následuje už jen stručný popis notace množin.
Následující kapitola je věnována řetězcům, což nakonec není tak zcela nudné téma, jak by se mohlo zdát. Je tomu jednak proto, že práce s řetězci je jednou z největších změn oproti Pythonu 3 a rovněž proto, že... protože řetězce a práce s textem nejsou ve skutečném světě ale vůbec nudné.
Autor začíná popisem kódování znaků – fakt, že běžné 8bitové číslo není schopno pojmout všechny znaky, které lidstvo ráčilo za uplynulé roky vymyslet způsobil, že byla vytvořena řada kódování, která mapovala čísla na znaky z zpět. Následuje popisem standardu Unicode a jeho různých kódování – UTF-32, UTF-16, dojde na značku BOM a rovněž na UTF-8.
Následuje už klasická část ponořme se věnovaná řetězcům v Pythonu – což jsou
unicode řetězce. Vždy a bez výjimky. Protože svět není krásné místo, kde
existují pouze Unicode řetězce, byl rovněž přidán typ bytes
, což je
pole bajtů a na konci kapitoly autor ukazuje způsob, jak unicode řetězec
zakódovat (encode
) do pole bajtů a naopak, jak jej dekódovat zpět
(decode
). A taky demonstruje fakt, že Python nikdy automaticky nepřevede
řetězce na bajty a opačně.
Následuje popis formátovacích řetězců – v Pythonu 2 existoval formátovací
operátor %
. Ten byl ve verzi 3 zrušen a řetězce teď mají metodu format()
,
která podporuje speciální mini jazyk, který popisuje autor.
Ovšem řetězce mají i řadu dalších užitečných metod jako splitlines()
,
lower()
, count()
, nebo split()
. Zajímavé je také vykrajování (slicing –
mimochodem velice povedený překlad) nejen řetězců. Kapitola končí tím, jak
změnit výchozí kódování zdrojových kódů (UTF-8) na jiné.
Kapitola regulární výrazy (nejen ta, ale zde mi přišlo důležité se o citátu zmínit) začíná citátem
(Když se někteří lidé setkají s problémem, myslí si: „Já vím! Použiji regulární výrazy.“ V tom okamžiku mají problémy dva.)
— Jamie Zawinski
Kapitola začíná popisem toho, jak nešikovná může být neznalost regulárních
výrazů a používání jednoduchých řetězcových operací. Poté následuje případová
studie – adresy ulic, kde autor ukazuje, že napsat regulární výraz,
odpovídající danému řetězci není dost. Důležité také je, aby neodpovídaly
řetězce, které odpovídat nemají. Dalším příkladem je kontrola římských čísel,
kde jsou ukázány další aspekty práce s regulárními výrazy. Následuje odbočka k
víceslovným regulárním výrazům, což je speciální forma, při které Python
přestane považovat bílé znaky a #
za součást regulárního výrazu. Tato forma
umožňuje přehlednější zápis a bohatý komentář uvnitř výrazu. A kapitola končí
posledním příkladem - analýzou telefonních čísel.
A jak autor uvádí v části nazvané shrnutí, za 18 stran této kapitoly neprobral
nijak velkou část regulárních výrazů - některé, jako například [a-z]
budou
zmíněny dále, ale třeba pojmenované skupiny a podobná rozšíření, která Python
nabízí jsou už pouze v dokumentaci.
Následující kapitola Uzávěry a generátory se věnuje tématu, které by mohlo být zdánlivě složité, nicméně nijak zvlášť není. Nosným příkladem, kterému je věnována prakticky celá kapitola, je množné číslo anglických podstatných jmen. Pro zjednodušení alespoň těch pravidelných.
Autor pokračuje použitím regulárních výrazů a postupuje přes jednoduchý naivní
program, jehož logika je ve formě několikanásobné podmínky. Oddělí logiku do
skupiny jednoduchých funkcí match_foo
a apply_foo
, přes které teď hlavní
funkce iteruje. A protože tohle řešení není o moc víc flexibilní, protože
rozšíření algoritmu pořád vyžaduje psaní kódu, dojde k oddělení dat do
samostatného seznamu a napsání funkce, která vrací dvojici uzávěrových funkcí
match_foo
a apply_foo
.
Pokud nevíte, co je to uzávěr, možná nastala správná doba pro koupi této knihy.
A protože se tato funkce jmenuje... a generátory, dalším krokem je dynamické
budování seznamu uzávěrových funkcí – tu se seznámíme s příkazem yield
, což
je v zásadě forma příkazu return se zajímavými vedlejšími účinky, především
skutečnost, že další volání takové funkce pokračuje za posledním yield
.
Následující kapitola číslo 7 začíná docela zmateným popisem toho, co jsou to
vlastně třídy a iterátory – bohužel příklad začíná klíčovým slovem
class
, které je třeba vysvětlit nejdříve. Naštěstí se u tříd autor prakticky
nezdržuje akademickou terminologií a prakticky ukazuje, jak definovat třídu,
její atributy, co je to metoda __init__
, jak se vytvářejí instance, jak
přistupovat ke členským prvkům a podobně.
Poté se již čtenář dozví, že iterátory jsou v Pythonu objekty implementující
metodu __iter__
, která vrací objekt s metodou next
, který vrací hodnoty
daného seznamu - v tomto případě čísla Fibonacciho posloupnosti. Dozvíme se o
výjimce StopIteration
, kterým iterátor dává najevo, že posloupnost skončila. A
následuje přepis příkladu z předchozí kapitoly – čili iterátor pro jednotlivá
pravidla množného čísla.
Nosným příkladem kapitoly s příznačným názvem Iterátory pro pokročilé, je
alfametická hádanka - jde o to najít ke vzorečku SEND + MORE = MONEY
takové
mapování písmen na čísla, aby rovnost platila. A řešením je 15 řádků dlouhý
(nepočítaje importy a podobné drobnosti okolo) kód v Pythonu řešící právě
tento typ úloh. Na vstupu je řetězec zadání a výsledkem je řetězec s řešením.
Jádrem je již známý modul pro regulární výrazy, používání množin pro získání
unikátních hodnot z posloupnosti, příkaz assert
, generátorové výrazy (zápis je
podobný jako notace seznamu, pouze s kulatými závorkami a výsledkem je
generátor, který hodnoty obvykle dynamicky vytváří za běhu), výpočty permutací
pomocí modulu itertools
, řetězcová metoda translate
a nakonec ještě eval
(pochopitelně následována odstavcem eval is evil), kterým se ověřuje, že daná
rovnost platí.
Kapitola Unit testing nám představuje jednak danou knihovnu, ale
prostřednictvím převodu Římských čísel i programování založené na testech. A
protože v tomto typu programování se nejprve napíší testy, které pochopitelně
selhávají a potom až vlastní kód – autor začne taky tak – prázdnou funkcí
to_roman
, která pouze definuje rozhraní používané v testu a testem na známé
hodnoty. Ovšem to není vše, testování správných hodnot nám neřekne nic o tom,
jak se funkce zotaví ze špatného výstupu, takže je třeba přidat pár testů,
spustit je, opravit funkci a tak dále, že po přečtení této kapitoly již
nebudete chtít programovat jinak, než prostřednictvím testů.
Kapitola s honosným názvem Refaktorizace s předchozí úzce souvisí – kód, který nemá dobré testy je velice nebezpečné refaktorizovat. Příkladem je zde rozšíření podpory čísel z 3999 na 4999, takže změníme patřičné rozsahy v textech, spustíme je ... a zbytek pochopitelně znáte také.
Kapitola 11 se věnuje práci se soubory a proudy – což je oblast, která došla v
Pythonu 3 změn. Tak například není nutné používat codecs.open
, zabudovaná
funkce open
umožňuje specifikovat kódování souboru, které je platformně
závislé, takže by stálo za to uvádět kódování vždy. V této kapitole bude rozdíl
mezi znaky a bajty (read()
a seek()
, textové a binární soubory) opět
vystrkovat hlavu. V souvislosti se zavíráním je zmíněn výraz with.
Kapitola 12 se věnuje práci s XML - představena je knihovna ElementTree, která
je nějakou dobu součástí standardní knihovny. Což je v pořádku, protože nabízí
způsob práce s XML, který je více kompatibilní s Pythonem, než s Javou, či
jakými jazyky používanými pro návrh DOM a SAX API. Nicméně autor obvykle
nezůstává u trivialit, takže v polovině je představena knihovna lxml
, která
nabízí lepší podporu některých standardů, jako třeba XPath, než ElementTree a
taky je rychlejší. Navíc je její rozhraní kompatibilní s předchůdcem, takže je
vhodná doba na představení podmíněných importů a také import as. Dále se
představuje generování XML. A také import porušeného XML, což mi připomíná –
nosným příkladem bylo zpracování formátu Atom a na webu se občas stane, že
dostaneme nekorektní dokument, no.
Kapitola 13 O serializaci objektů začíná citátem z The Big Bang Theory (a pokud
jste zvědaví jaký, je vážně dobrý čas na koupi knihy) – nijak jsem nepřišel na
spojitost s tématem, ale je hezké vědět, že se autorův a recenzentův vkus
shoduje. Kapitola ukazuje práci s modulem pickle
, který dokáže objekty z
pythonu uložit do souborů, pro kterou operaci zavedl překladatel neformální
terminus technicus piklení. Autor mimo trivialit – uložíme, přečteme ukazuje i
modul pickletools
pro analýzu souboru.
Zbytek kapitoly je věnován ukládání objektů do formátu JSON, který je přeci jen ve skutečném světě použitelný o něco více a Python 3 disponuje příslušným modulem. Nejdůležitější je mapování JSON objektů do Pythonu a naopak, ale neméně důležité je vědět, kterak serializovat typy, které Python má a Javascript ne – ntice, nebo třeba pole bajtů.
Kapitola 14 s názvem webové služby nad HTTP se věnuje webovým technologiím.
Dozvíte se, co je to HTTP, jak pracuje a které knihovny jsou v Pythonu 3 k
dispozici. Významná část kapitoly se pak věnuje důvodům, proč zabudované
knihovny nepoužívat a spolehnout se na externí httplib2
. Stručně – důvody jsou
(ne)podpora cache, ETag, komprese a jiné. Kdo neví o co jde, tak by měl vážně o
koupi knihy uvažovat. Autor ukazuje, jak a co dělá knihovna http.client
a co a
jak přenáší httplib2
v různých situacích. To jest jak podporuje všechno to, co
http.client
ne.
Další část kapitoly je věnována posíláním dat na web, čili metodě POST
(a dále
i jejímu mazání - čili DELETE
). Příkladem je odesílání mikrozpráv na server
identi.ca. Což mimo jiné znamená probrat i to, jak funguje autentizace.
Kapitola 15 je z jiného soudku – jejím tématem je přepis knihovny z Pythonu 2 do Pythonu 3. Čili veskrze praktická věc pro ty, kteří již nějaký Python kód spravují a pro ty ostatní příležitost se podívat, v čem je Python 3 o tolik lepší. Sympatické je, že jelikož knihovna chardet detekuje různá kódování, dozvíte se zároveň o aspektech tohoto problému více, než byste možná kdy chtěli vědět, protože se začíná popisem problému a knihovny.
Přepis knihovny je v zásadě refaktorizace, takže pokud nemáte v pořádku testy, raději se do toho ani nepouštějte. V tomto případě je problém o něco složitější, protože musíte do Pythonu 3 převést i samotné testy. Základem je spuštění skriptu 2to3, který dokáže upravit většinu z obvyklých změněných konstrukcí. Ke slovu se dostane i problematika více-souborových modulů, věci, které skript opravit neumí a zbytek kapitoly se spouštějí testy a upravují se řetězce na bajty a obráceně.
Kapitola 16 je potom už víceméně odpočinková. Týká se totiž distutils
, což je
způsob tvorby pythoních balíčků a rovněž je ukázáno, jak se pracuje s pypi –
Python Package Index, což je centrální zdroj balíčků pro Python.
Po této kapitole následují ještě čtyři dodatky. První se týká skriptu 2to3
,
takže je v něm podrobně popsáno co skript převádí a jak, stejně tak i volitelné
doplňkové úpravy, které jsou standardně vypnuté. Dodatek číslo 2 s na první
pohled nudným názvem Jména speciálních metod se zabývá problematikou
__metod__
, díky nimž je možné s našimi třídami pracovat jako se seznamem,
slovníkem, číslem a podobně. Poslední dodatek s příznačným názvem Čím
pokračovat ukazuje, že ani vyčerpávající Dive Into Python 3 nedokázala pokrýt
všechny aspekty tohoto jazyka a že některé konstrukce nebyly vůbec zmíněny.
Poslední čtvrtý Odstraňování problémů hovoří o tom, jak spustit příkazový řádek
a jak z něj spustit Python.
Začněme netradičně tím, co se mi nelíbilo – podtrhávané názvy kapitol. Přestože
je třeba následovat originál, podtrhávané názvy jsou zlá, nepěkná věc. A taky
část s iterátory byla taková – ne zcela přesvědčivá. Myslím, že čtenář nebude
tušit rozdíl mezi generátorem a iterátorem a především se naučí vracet self
jako výsledek volání __iter__
, díky čemuž nemůžeme mít více jak jeden iterátor pro
kolekci. Na druhou stranu, pokud recenzent nenajde nic jiného, že musí
zmínit podtrhnuté nadpisy, znamená to, že se mu kniha opravdu
líbila.
Což je pravda – kniha je vydána v typické sazbě edice CZ.NIC, tentokrát laděna do modra (a nechtějte po mě říct, zda to má být azurová, nebo jiná). Překlad je velice povedený – i když osobně bych nechal název knihy nepřeložený. Asi největší výzvou překladatele tak byl překlad list/dictionary/set comprehession – což je stručný zápis generování daného datového typu. Porodní bolesti výsledné generátorové notace jsem sledoval (stejně jako další drobtů, už ne tak výrazně problematických) na české emailové konferenci o Pythonu a výsledná generátorová notace seznamu/slovníku/množiny je poměrně rozumným výsledkem. Navíc se dá zkracovat na „a tato notace vracející seznam“, což už je rozumně znějící česká věta.
Překlad obsahuje též pár osobních povzdechů překladatele – například u modulu pickle, kde zavedl pojem piklení inspirován známou pohádkou, které jsou v celkovém neformálním vyznění knihy velice sympatické.
Kniha samotná je napsána velice čitelně – připomíná spíše sbírku povídek, kterak mocný Python řeší naše problémy, než suchopárnou referenční příručku. Každá kapitola začíná problémem, který se pak řeší určitým prostředkem jazyka – ať jde o konstrukci jazyka – jako třeba generátory, nebo zabudované knihovní funkce jako třeba regulární výrazy, anebo externí knihovny – případ lxml. Ovšem nezbývá než zopakovat, tohle není referenční příručka knihovny/knihoven jazyka Python.
Samotný styl Marka Pilgrima, kdy se na pravém okraji výpisu kódu nachází [odkazové značky] a většina textu je potom ve formě poznámek ... nad čarou, kde jednotlivé body kódu jsou uvozeny právě těmito značkami. To sice způsobuje těžkosti překladatelům, kteří nemají místo, kam vložit svoje poznámky, ale jinak je výsledek překvapivě čitelný.
Další sympatická věc je, že se kniha nebojí věnovat i tématům, která jsou na první pohled mimo záběr. Příkladem je podpora cachování v HTTP protokolu, kterou je dobré znát, aby vaše programy zbytečně neplýtvaly pásmem a rovněž poskytuje spoustu detailů o Unicode, které by ovšem každý programátor znát měl – práce s textem je základem velké spousty programů.
A v neposlední řadě – každá kapitola je ukončena sadou odkazů, z nichž autor buď čerpal nebo nějakým způsobem rozšiřují původní téma.
Knihu nezbývá než doporučit, překlad je povedený, vazba taktéž a obsah je pro vás zajímavý ať jste v Pythonu nováčkem, nebo znáte verzi 2 a chcete odzkoušet novinky verze 3 a dokonce i v případě, že se chcete lépe doučit verzi 2, protože pak stačí zapomenout fakt, že Python 3 zná pouze Unicode řetězce a typ bytes a máte v zásadě Python 2.
Tuto knihu je možné – stejně jako všechny ostatní tituly v edici CZ.NIC – bezplatně stáhnout ze stránek knihy.nic.cz. Zde je také možné si knihu objednat v tištěné podobě.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Mno, pominu ty organizační záležitosti a tady jsou mé přípomínky:
BTW v článku je docela dost chyb hlavně v interpunkci, ale teď se mi nechce to sbírat a hlásit.
Asi největší výzvou překladatele tak byl překlad list/dictionary/set comprehession ... seznamu/slovníku/množinyTohle jsem trochu nepochopil, proč to byl takový oříšek přeložit. Tyhle pojmy se takto do češtiny překládají minimálně 20 let (nejspíš o dost déle, ale nejsem takový pamětník). Stačí se podívat do libovolné česky psané knihy. V překládaných záleží na (ne)znalosti překladatele.
yield
.
Pro ty, kteří se chtějí prokousat vznikem tohoto překladu - viz archívy březen a duben 2010 na py.cz.
BTW: když už je tak zřejmé, jak list comprehession přeložit, jistě by bylo možné napsat taky jak se překládá.
Ja prekladám pri prednáškach "list comprehension" ako "vydelenie zoznamu". V tomto prípade totiž termín comprehension bol zdedený z matematického pojmu "set comprehension", ktorý sa prekladá ako "vydelenie množiny".
Poté se již čtenář dozví, že iterátory jsou v Pythonu objekty implementující metodu __iter__, která vrací objekt s metodou __next__…Chyba soudruhu, ta druhá metoda se jmenuje prostě
next()
, bez podtržítek. Vím, je to překvapivé, ale i takové exoty v pythonu trpíme
Python 3.1.3 (r313:86834, Mar 10 2011, 18:01:17)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x=iter([])
>>> dir(x)
['__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__gt__', '__hash__', '__init__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__',
'__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__']