Občas mě kamarád poprosí o pomoc se zapeklitým problémem, většinou v PHP. Přijdu, pomůžu vypátrat a nezapomenu zmínit, jak je PHP nelogické, nekonzistentní, plné WTF momentů a jak jsem rád, že jsem tento svět opustil. Dokonce jsem kamaráda nahlodal natolik, že si začal o Pythonu číst. Zajímalo ho ale taky, když mám tolik výtek k PHP, kolik a jaké výtky mám k Pythonu? To mě trochu zarazilo, nikdy jsem o tom nepřemýšlel. A na nic se mi nedařilo přijít. Nevzdal jsem se, vytvořil si prázdný texťák a postupem si zapisoval co se naskytlo. Výsledkem je následující seznam…
-
Výchozí parametr ve funkci/metodě se vyhodnotí jednou při kompilaci, nikoliv při volání. Tedy pak vzniká tento problém:
>>> def foo(l=[]): ... l.append(42) ... print l ... >>> foo() [42] >>> foo() [42, 42]
-
Datový typ
bool
je ve skutečnosti takéint
. Při podmínkování na datový typ se nesmí zapomenout nejprve zjišťovat, zda se nejedná obool
a teprve potom oint
. Tím to nekončí, jsou tu další zajímavé vedlejší účinky:>>> isinstance(True, int) True >>> True + True 2 >>> {1: 'one', True: 'true'} {1: 'true'}
-
Líbí se mi, že si lze pomoct závorkami zalomit text bez nutnosti použití ošklivých zpětných lomítek. Bohužel to s sebou přináší možnost vznik chyb, které se velmi těžko hledají…
>>> t = ('a', 'b' 'c') >>> len(t) 2 >>> # Tohle je ale fajn. >>> ( ... 'some very long ' ... 'sentence...' ... ) 'some very long sentence...'
-
Také se mi líbí, že
tuple
lze zapsat bez nutnosti závorek (tím pak lze zapsat napříkladfor k, v in d.items()
). Jen když se někde nechtěně objeví čárka nebo se naopak na ni zapomene…>>> 2, (2,) >>> (2) 2
-
Je fajn, že se mohu vybrat svobodně mezi tabulátory a mezerami. Co už ale fajn není je, že mix je povolen. Když se pak otevře soubor na chvíli v jiném editoru a nevšimnu si špatného nastavení, Python mi nezahlásí
SyntaxError
. - Chápu důvod, proč se musí explicitně k metodám psát
self
. Ale, opravdu by to nešlo bez toho? Nejednou jsem zapomnělself
napsat. - Relativní importy jsou skvělá věc, ale limituje to v použití názvů. Aneb naštve když mě konečně napadne skvělý název pro soubor s mojí super třídou a o chvilku později zjistím, že mi to koliduje s nějakou knihovnou, kterou používám. To lze tedy potlačit direktivou
from __future__ import absolute_import
nebo použitím Pythonu 3, takže už to není takový problém. str
aunicode
. Kolik chyb tohoto problému jsem viděl! Kéž by všichni psali tak, aby byl všudeunicode
a převode nastr
jen naprosto v nutném případě. Naštěstí tohle řeší Python 3.- Naneštěstí použití Pythonu 3 není tak jednoduché. Nekompatibilita je nekompatibilita a tak ne všechny používané knihovny zmigrovaly. Což je u větších projektů dost limitující (vždycky se najde knihovna, kvůli které přejít nelze).
A to je vše, víc mě nenapadá. Celkově mám Python velmi rád. Možná proto, že je to rebel; kamarád mi řekl, že Python mění jeho svět programování. Jinde jsou totiž podobné zápisy vyhodnoceny jako syntax error. Aneb díky Pythonu se mohu soustředit více na problém, který řeším, a nepřemýšlet, jak něco napsat.