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
boolje ve skutečnosti takéint. Při podmínkování na datový typ se nesmí zapomenout nejprve zjišťovat, zda se nejedná oboola 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
tuplelze 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ělselfnapsat. - 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_importnebo použitím Pythonu 3, takže už to není takový problém. straunicode. Kolik chyb tohoto problému jsem viděl! Kéž by všichni psali tak, aby byl všudeunicodea převode nastrjen 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.
v kategorii