Co mi vadí na Pythonu

cs v kategorii code • 6 min. čtení
Mind the age! Most likely, its content is outdated. Especially if it’s technical.

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á o bool a teprve potom o int. 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říklad for 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ěl self 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 a unicode. Kolik chyb tohoto problému jsem viděl! Kéž by všichni psali tak, aby byl všude unicode a převode na str 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.



Sdílejte:   Facebook   Twitter   Reddit   Tumblr   Pinterest




Může se vám také líbit

en What Makes Good Program?, November 20, 2018
en Old Code, October 31, 2018
en Fast JSON Schema for Python, October 1, 2018
en Open Source Responsibilities, September 6, 2018
en Deployment of Python Apps, August 15, 2018


Populární v kategorii code

en Makefile with Python, November 6, 2017
en Deployment of Python Apps, August 15, 2018
cs Jasně, umím Git…, August 6, 2014
cs Checklist na zabezpečení webových aplikací, March 1, 2016
cs Pokročilé regulární výrazy, August 17, 2014