34 komentářů k článku Python profesionálně: co jazyk nabízí:

  1. perl

    Pocitani slov

    Na pocitani slov je skoda startovat editor ;-)

    perl -nae ‚END{print“$_:t$k{$_­}n“ for sort keys%k}$k{$_}+­+for@F‘

      1. perl

        Re: Pocitani slov

        wc -w dela neco jineho, shellovsky prikaz, ktery pocita cetnost slov, je uniq. Na to nelze rict nez RTFM.

        1. perl

          Re: Pocitani slov

          A jeho pouziti bude pomalejsi, protoze ta slova je treba nejdrive seradit. Muzete si to zmerit:

          sed ‚s/ /n/g‘ | sort | uniq -c

  2. tom

    našeptávač - ipython

    Pokud chci shell s našeptávačem, pouštím IPython. Je bohatší o opravdu úctyhodnou hromadu dalších funkcí, které jsou pro ruční psaní skvělé (copy, paste, editace příkazu v editoru, help přes ? a ??, barevné tracebacky atd atd).

  3. dingo

    Díky za tipy

    je super si připomenout, že v pythonu máme tolik krásným funkcí a je dobré o nich vědět. Zatím nejlepší článek ze série Python profesionálně…

  4. Laik

    Je to super

    Tento zatím třídílný seriálek vypadá napsaný velmi fundovaně, je vidět, že autor opravdu ví, o čem píše. Pro mne (a asi nejsem sám) je to ale jako by psal švédsky.
    Na linuxsoftu vycházel v letech 2005 – 2011 seriál o perlu – 149 dílů, krok za krokem.
    Kéž by něco takového vzniklo i pro Py…

    Předem, ale asi marně, děkuji.

    1. KArol

      Re: Je to super

      Jak pisete, dobre napsano pro nekoho kdo to umi a chce si bud pripomenout co tam je nebo ukazat co lze. Proste pro lidi co v tom uz umi delat a chcou si zdelit na prikladech jde toto a jeste toto.

      P.S. neklritizuju profesionalitu(au­tor dle clanku umi), ale pro nekoho kdo chce teprve zacit je to nepouzitelne.

      1. Martin Hassman

        Re: Je to super

        Ale to je u seriálu zaměřeného na lidi, kteří Python již nějakou dobu používají, zcela v pořádku ne? Začátečník si stáhne kupříkladu český překlad „Ponořme se do Pythonu“, který je zdarma na http://knihy.nic.cz/ a může začít. Nebo využije některý se starších začátečnických tutoriálů, kterých je v češtině hned několik.

          1. Skalimil Vuk

            Re: Je to super

            Ta kniha Ponořme se do Pythonu je výborná, vřele doporučuji. Líbila se i bývalému šefredaktorovi zdrojáku http://www.zdrojak.cz/clanky/python-3-uspesny-ponor/

            V knihkupectví najdete Python 3 Výukový kurz od Marka Summerfielda. Jde od začátku a postupuje pěkně do hloubky. Také doporučuji.

            Seriály pro začátečníky vycházely třeba i na rootu, ale jsou staršího data, je třeba s tím počítat.

  5. jiri.vrany

    Pěkné

    Že je prázdný list nevhodná výchozí hodnota, to ví každý kdo to zkusil a použil PyLint, ale aspoň jsem se dozvěděl proč. Díky.

  6. osramek

    Chybka

    Předpokládám, že v části „Defaultní hodnoty slovníku“ bylo na řádku 9 spíše zamýšleno:

    d[key].append(e­lement)

    Díky za článek!

  7. Honza Kral

    Hacky

    diky za clanek. Inspekce __dict__, at uz primo nebo pres vars() je pomerne nebezpecna zalezitost kdyz nevime uplne presne jak je dany objekt naimplementovany (a i potom ma sve problemy). Vtesina veci se da resit mnohem lepe a mnohem cisteji, v tomto pripade prostou inspekci parseru:

    dict((o.dest, getattr(options, o.dest)) for o in parser.option_list if o.dest)

    Ziskame si vsechny promenne ktere parse mel nadefinovat a z options ziskame jejich hodnoty. Pouzivame verejne API a mame jistotu ze nas kodu bude fungovat spravne, zadny zbytecny hack ktery se spoleha na vnitrni implementaci.

    Dve reseni pro predavani listu jako parametru budou mit vyrazne jinou funkcnost, v nicem to nejsou ekvivalentni implementace! Nehlede na to ze vytvaret kopii parametru jen kvuli naseptavaci je pri nejmensim podivne. Od toho jsou v Pythonu docstrings abychom mohli popsat co metoda ci funkce dela. Kopirovani listu neni zadarmo.

    Ad „Switch“: ano, jde to. Stejne jako jde zamenit objektu atribut __class__ za behu a zmeni mu to tridu. Je to ale dalsi z veci v tomto serialu ktere rozhodne nepatri do profesionalniho kodu, ani kdyz primhourim obe oci. A nedokazu si pro to predstavit zadny rozumny use-case ktery by nesel implementovat lepe.

    A opet: jak to chcete testovat? Testovani je (spolu s citelnosti) jeden ze zakladnich piliru Pythonu a profesionalniho kodu presto spousta tipu popisovana v tomto serialu neniotestova a hlavne dramaticky zhorsuje testovatelnost (nehlede o citelnosti) kodu.

  8. Ales Zoulek

    Neslo by to aspon ciste?

    Pokud ma serial za cil opravdu popisovat, jak psat Python *profesionalne*, mel by se drzet nekolika principu:

    – Pouzivat public API, misto spolehani na vnitrni implementace
    – Testovatelnost
    – Citelnost

    Podle toho by taky mely vypadat jednotlive rady a tipy. Pritom aspon polovina z clanku porusuje minimalne jedno z techto principu.

    1] Seznam options je na parseru. Prochazet je pres vars() je spolehani se na nezname API a necitelne.

    2] To, ze v Pythonu neni konstrukce „switch“ se typicky nahrazuje dictionary callables. Co s tim ma spolecneho monkeypatchovani vlastni tridy za behu??

    3] Co je to za hack s readline, kdyz mame IPython? Proc???

    Repr je dobry tip. Jen bych doplnil, ze byva uzitecne si metodu __repr__() definovat na vlastnich tridach – pomaha to pak pri praci s temito instancemi pri debugu v python konzoli.

    Mnoziny se daji primo pres slozene zavorky konstruovat i v Python 2.7.

  9. whiskybar

    Python sraz

    Kdyz jsme u toho Pythonu, prijdte se podivat na skutecne Python profesionaly z masa a kosti na dalsim, 13. Python/Django srazu, ktery probehne uz zitra, 18. 4. 2012 v Praze 5 na Smichove na adrese Ostrovkeho 38a!

    Na tento vecer bude mobilni s (nejenom) Pythonem – Scala & Objective C. Vice informaci na http://lanyrd.com/2012/djangocs-april/

  10. pepa

    dotaz

    asi pomerne trivialni dotaz,ale nejsem pythonista,jen v prostredi aplikace ve ktere pracuji lze pouzit python jako scriptovaci jazyk…

    alokace a pristup k pameti, potrebuji dynamicky vytvorit nejaky 3 rozmerny grid,radove tisice prvku na osach x,y,z pricems prvek bude nejaky class. v C-ku si alokuju pamet na x*y*z mych classu,klasicke 3rozmerne pole. chci to same udelat v pythonu,samozrejme to sice jde,ale vsechny postupy mi prisly zatgim jako drbani se levou rukou za pravym uchem.
    jak se tahle vec dela klasicky po pythonovsku?

    dik:-)

    1. Honza Kral

      Re: dotaz

      Po pythonovsku nemusim nic alokovat, bud pouziju list (analogie array z jinych jazyku) nebo dict (=~ hashmap) pro sparse grid.

      Zalezi na tom jak ten grid chces pak vyuzivat, jestli by nebyl nejjednodussi pouzit ten dict s tim ze jako index pouzijes tuple (x, y, z), takze:

      grid = {}
      grid[0,0,0] = object
      grid[1,2,3] = dict
      grid[x,y,y] = OtherClass

      muzes pouzit i defaultdict z dnesniho clanku a alokovat tak jednotlive bunky lazy.

      Pokud potrebujes ten grid nejak rezat tak bud muzes pouzit list obsahujici listy:

      grid = [[[Class() for z in xrange(MAX_Z)] for y in xrange(MAX_Y)] for x in xrange(MAX_X)]

      pripadne si muzu nagenerovat prazdny plochy list a klasicky prepocitavat souradnice:

      # rychla inicializace velkeho listu
      l = [None] * (MAX_X * MAX_Y * MAX_Z)

      def get_y_column(l, zcord, ycoord):
      wall_size = MAX_X * MAX_Y
      temp_l = l[z*wall_size:(z+1) * wall_size] # z-ta stena kvadru
      return temp_l[ycoord::MAX_Y] # kazdy MAX_Y-ty prvek, pocinajici ycoord == ycoord-ty sloupec

      pro lepsi vykon lze oba slicy zkombinovat do jednoho a pro usporu pameti pouzit spise itertools:

      from itertools import islice
      def get_y_column(l, zcord, ycoord):
      return islice(l, ycoord + zcoord + MAX_X * MAX_Z, (zcoord + 1) * MAX_X * MAX_Z, MAX_Y)

      pozn: nekontroloval jsem jestli jsem nekde neprevratil poradi x, y, z – uvedeny kod slouzi pouze pro ilustraci moznych ristupu

      1. pepa

        Re: dotaz

        diky moc,

        jde mi o co nejprimnejsi pristup k bunkam,s tim ze rezy budou podstatne mene caste,ale budou.kompilovany kod mel radove miliony r/w operaci za sekundu,samozrejne se ocekava od pythonu mensi performance,ale aby to bylo maximalne python-optimalni:-) pri velikostech gridu jak jsem psal pujde o stovky MB/grid takze i nejkompaktnejsi pametova struktura by bodla:-) obejdu se bez vymozenosti jako variabilni velikost prvku atd.

        1. Honza Kral

          Re: dotaz

          Tak nejprijemnejsi pristup k bunkam splnuje asi ten dict, je to nejjednodussi na primy pristup (O(1)) a clovek si nemusi pamatovat jak se ty listy vnoruji.

          Co se pametove narocnosti tyka tak je to vcelku jedno – vsechno bude pracovat s referencemi ktere maji fixni velikost, u dict je index hash tuplu coz je jen cislo:

          hash((1,2,3)) == -378539185

          list v pythonu ma tu vlastnost ze musi obsazovat souvisly kus pameti coz muze zdrzovat pri alokaci a zvetsovani kdy se musi naalokovat vetsi misto + presunout stavajici data. U takhle velkych struktur uz to muze byt problem.

          Nevim uplne presne jak je to s pameti u dictu, ale muj odhad je ze to bude pri nejhorsim stejne. Vice info: http://stackoverflow.com/questions/671403/memory-efficiency-one-large-dictionary-or-a-dictionary-of-smaller-dictionaries

  11. dik

    python 3 a změna hodnoty atributu objektu z metody

    Ahoj, poradí mi někdo jak mám v metodě přiřadit novou hodnotu atributu obj? Toto mi nefakčí:

    class abc():
    def __init__():
    self.is_alive= False

    def zmena():
    self.is_alive= True
    return

    def tiskni():
    print(self.is_a­live)
    return

    ins = abc()

    ins.tiskni()
    False
    ins.zmena()
    ins.tiskni()
    False

    Přes global to nejde… Díky dik

    1. Havri

      Re: python 3 a změna hodnoty atributu objektu z metody

      Chybí ti tam self v definici metod.

      class abc():
          def __init__(self):
              self.is_alive = False
      
          def zmena(self):
              self.is_alive = True
      
          def tiskni(self):
              print(self.is_alive) 
      1. dik

        Re: python 3 a změna hodnoty atributu objektu z metody

        sorry ,psal jsem to z hlavy ,ale v kodu self mam a presto to nefakci.
        dik

          1. dík

            Re: python 3 a změna hodnoty atributu objektu z metody

            Ano,máte pravdu , vše funguje dle očekávání – měl jsem v kódu zamotanej modul „multiprocessin­g.Process“ ,který mě mátl.
            Díky za Váš čas :-),Dík

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3624