abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 21:22 | IT novinky

    Švýcarská AI centra EPFL, ETH Zurich a CSCS představila otevřený vícejazyčný velký jazykový model (LLM) s názvem Apertus. Vyzkoušet lze na stránce Public AI Inference Utility.

    Ladislav Hagara | Komentářů: 1
    dnes 17:22 | Nová verze

    Byl vydán Linux Mint 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 0
    dnes 12:55 | IT novinky

    Čínská společnost Tencent uvolnila svůj AI model HunyuanWorld-Voyager pro generování videí 3D světů z jednoho obrázku a určené trajektorie kamery. Licence ale nedovoluje jeho používání na území Evropské unie, Spojeného království a Jižní Koreje.

    Ladislav Hagara | Komentářů: 1
    dnes 12:11 | Komunita

    Blender Studio se spojilo s kapelou OK Go a výsledkem je videoklip k písni Impulse Purchase. Stejně jako samotný 3D software Blender je i ve videoklipu použitý animovaný chlápek open source. Kdokoli si jej může stáhnout a upravovat.

    Ladislav Hagara | Komentářů: 0
    dnes 01:33 | Komunita

    Zig Software Foundation stojící za programovacím jazykem Zig publikovala finanční zprávu za rok 2024. Současně s prosbou o finanční příspěvek.

    Ladislav Hagara | Komentářů: 0
    dnes 00:22 | Nová verze

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za srpen (YouTube). Vypíchnuta je podpora Tabulek Google, implementace Gamepad API a Cookie Store API nebo také podpora WebGL na Linuxu.

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | Komunita

    openSUSE Leap 16, včetně Leap Micra 6.2+, nově nabízí 24 měsíců podpory pro každé vydání. To je dva roky aktualizací a stability, což z něj činí nejdéle podporovanou komunitní distribuci vůbec. Leap se tak stává ideální platformou pro všechny, kdo hledají moderní, stabilní a dlouhodobě podporovanou komunitní Linux distribuci.

    lkocman | Komentářů: 0
    včera 16:33 | Bezpečnostní upozornění

    Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal dne 3. 9. 2025 VAROVÁNÍ před hrozbou v oblasti kybernetické bezpečnosti spočívající v předávání systémových a uživatelských dat do Čínské lidové republiky a ve vzdálené správě technických aktiv vykonávané z území Čínské lidové republiky. Varováním se musí zabývat povinné osoby podle zákona o kybernetické bezpečnosti.

    Ladislav Hagara | Komentářů: 28
    včera 11:55 | IT novinky

    Americká internetová společnost Google nemusí prodat svůj prohlížeč Chrome ani operační systém Android. Rozhodl o tom soud ve Washingtonu, který tak zamítl požadavek amerického ministerstva spravedlnosti. Soud ale firmě nařídil sdílet data s jinými podniky v zájmu posílení konkurence v oblasti internetového vyhledávání. Zároveň Googlu zakázal uzavírat dohody s výrobci mobilních a dalších zařízení, které by znemožňovaly

    … více »
    Ladislav Hagara | Komentářů: 3
    včera 11:33 | Humor

    Prvního září ozbrojení policisté zatkli na na londýnském letišti Heathrow scénáristu a režiséra Grahama Linehana, známého především komediálními seriály Ajťáci, Otec Ted nebo Black Books. Během výslechu měl 57letý Graham nebezpečně zvýšený krevní tlak až na samou hranici mrtvice a proto byl z policejní stanice převezen do nemocnice. Důvodem zatčení bylo údajné podněcování násilí v jeho 'vtipných' příspěvcích na sociální síti

    … více »
    Gréta | Komentářů: 110
    Pro otevření více webových stránek ve webovém prohlížečí používám
     (82%)
     (8%)
     (2%)
     (3%)
     (4%)
     (1%)
    Celkem 142 hlasů
     Komentářů: 11, poslední dnes 16:12
    Rozcestník


    Vložit další komentář
    24.6.2006 11:11 Kníže Ignor | skóre: 19 | blog: stoupa
    Rozbalit Rozbalit vše Re: Python a vůbec
    Wow, to mi připomnělo Haskell. Python je funkcionální jazyk? Nebo kam ho zaškatulkovat?
    Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
    Mikos avatar 24.6.2006 14:40 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Python a vůbec
    V Pythonu je možno programovat objektově, funkcionálně i procedurálně. A od doby co jsou v něm dekorátory snad i aspektově (ale to jen tlumočím co jsem si někde přečetl, ve skutečnosti nemam zdání co to aspektové programování je ;-)).
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    JiK avatar 24.6.2006 15:34 JiK | skóre: 13 | blog: Jirkoviny | Virginia
    Rozbalit Rozbalit vše Re: Python a vůbec
    muzete me, polodebilnimu chemikovi, ktery 'programuje' akorat v bashi a maturoval s pascalu/gwbasicu v DOSu, vysvetlit co ze je to "objektově, funkcionálně, procedurálně a aspektově" ???

    Co je to objektove orientovane programovani? Jak bys to vysvetlil sve babicce? Upozornuju, ze s kazdou ucebnici ANSI C jsem skoncil tak na strane 6-8 kdy zacli mluvit o pointerech a tak. proste mi to hlava nebere. Ja doted nejsem chopen pochopit, jak, kdyz se progam vykonava po radkach, (asi i binarka pak nejak odpovida tem puvodnim radkum) se muzou dit 2 nebo vic veci "naraz" proste si neumim predstavit, jak to funguje uvnitr, jak se mohou naraz pocitat v jednom bezicim programu 2 a vice uloh, rekneme trebas pocitat 2 faktorialy naraz, nebo v nejake hre vykreslovat grafiku a zaroven pocitat AI protivniku....
    24.6.2006 16:00 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Co je to objektove orientovane programovani? Jak bys to vysvetlil sve babicce?
    Objektově orientované programovaní používá objekty. Objektem je souhrn vlastností a věcí co s ním lze dělat. Například míč může být objekt, ten má třeba barvu a jde ho nakopnout. No a tomu samotnému pojmenování míč, tomu říkáme třída objektů, protože ve skutečnosti, když se řekne míč, tak tím nemyslíme konkrétní míč, ale všechny míče. Pak kdyše řekne tento míč, tak máme na mysli konkrétní míč s jeho aktuální barvou, třeba červenou a když ho nakopneme, tak poletí určitou rychlostí, protože kromě barvy měl třeba konkrétní hmotnost atd. Krom toho mezi míči máme další podskupiny, jako baskedbalový míč, fotbalový míč atd. Těmto třídám říkáme dědičné třídy od třídy míč, protože po třídě míč dědí některé vlastnosti, třeba že jsou kulaté. No a objektově orientované programování na všechno kouká jako na objekty. Tak to by bylo pro babičku a pro tebe bych k tomu dodal, že těm vlastnostem říkáme atributy a jsou to vlastně data. To co s nima jde dělat říkáme metody a tím, že voláme metody nad určitým balíkem dat dosáhneme jejich zapozdření a tomu dohromady říkáme objekt. V určitých případech to zjednodušuje a zpřehedňuje programování. Krom toho bych babičku i tebe odkázal na nějakou učebnici OOP :-)
    Upozornuju, ze s kazdou ucebnici ANSI C jsem skoncil tak na strane 6-8 kdy zacli mluvit o pointerech a tak. proste mi to hlava nebere. Ja doted nejsem chopen pochopit, jak, kdyz se progam vykonava po radkach, (asi i binarka pak nejak odpovida tem puvodnim radkum) se muzou dit 2 nebo vic veci "naraz" proste si neumim predstavit, jak to funguje uvnitr, jak se mohou naraz pocitat v jednom bezicim programu 2 a vice uloh, rekneme trebas pocitat 2 faktorialy naraz, nebo v nejake hre vykreslovat grafiku a zaroven pocitat AI protivniku....
    Tak tohle s tím moc nesouvisí, jinak ten kód se skutečně vykonává na jednom procesoru postupně, to zaráz se dosahuje trikem, třeba, že každý chvilku tahá pilku, nebo se tam těch procesorů strčí víc :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    24.6.2006 22:38 Petr Bayer | blog: NIL
    Rozbalit Rozbalit vše Re: Python a vůbec
    A nebo jinak. Mame tridu, ta je sablonou pro vytvareni predmetu. Tyto predmety nazyvame objekty. Takze mame treba tridu (sablonu) mic a ted si podle ni udelame objekt (predmet), alias instanci tridy. Nazveme ho treba petruv_mic. A tomuto objektu pak muzeme posilat zpravy, aby nam treba "rekl" jake je barvy, a nebo aby letel urcitym smerem, atd. To je objektove programovani. Pak jsou tam jeste jine veci jako je dedicnost (kdy vytvarime novou tridu tim, ze "zkopirujeme" a upravime jinou tridu (treba z obecneho mice udelame rugbyovy_mic, fotbalovy_mic apod.)) atd.
    Kill the poor!
    msk avatar 26.6.2006 12:14 msk | skóre: 27 | blog: msk
    Rozbalit Rozbalit vše Re: Python a vůbec
    Skusim to na jednoduchom priklade:

    funkcionalne:
    Auto a;
    Auto b;
    chod_do_lava ( a );
    chod_rovno ( a );
    pockaj_na_druhe_auto ( a, b );
    print zisti_rychlost_auta ( b );

    objektovo ( metody su priamo sucast auta ):
    Auto a;
    Auto b;
    a.dolava();
    a.rovno();
    a.pockaj_na ( b );
    print b.rychlost();

    Samozrejme to ma vyhody uplne inde, ako len syntakticky zapis, ale ako priklad to snad pomoze.
    Mikos avatar 26.6.2006 12:24 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Python a vůbec
    Nemůžu si pomoct, ale přijde mi, že sis spletl funkcionální programování s procedurálním :-)
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    26.6.2006 17:09 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Python a vůbec
    Taky mám ten pocit :o)

    V procedurálním programování se používají funkce, ale to je tak všechno :o) To má s funkcionálním programováním společnýho akorát kousek názvu.
    27.6.2006 09:52 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Hmm, funkcionálně asi takhle:
    rychlost(cekalo_se_na_nej(auto('b'), jelo_rovne(zahlo_doleva(auto('a'))))
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    24.6.2006 19:31 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Python a vůbec
    Jaký je rozdíl mezi funkcionálním a procedurálním programováním? Vzpomínám si jen, že v Pascalu byly procedury a funkce a pro mě jediný rozdíl byl v tom, že procedury nevracely návratovou hodnotu, tedy pokud si dobře pamatuji…
    24.6.2006 21:03 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Python a vůbec
    Což ovšem funkcionální programování určitě není. I proto, že Pascal se inspiroval Algolem a rozlišuje přiřazení a výrazy :-D.

    Pokud už funkcionální programování, tak Lisp, nebo raději Haskel.
    When your hammer is C++, everything begins to look like a thumb.
    24.6.2006 21:21 Radek Šlesinger | skóre: 13 | Adamov
    Rozbalit Rozbalit vše Re: Python a vůbec
    Snad nebudu moc mystifikovat. Výpočet v imperativním jazyce znamená postupné vykonávání příkazů, jak jdou za sebou, mezivýsledky si ukládáš do proměnných, můžeš používat cykly.

    Pascal:
    function SumOneToN (n : Integer) : Integer;
    var i,s : Integer;
    begin
      s := 0;
      for i := 1 to n do
        s := s + i;
      SumOneToN := s
    end;
    
    Ve funkcionálním jazyce je to postupné zjednodušování nějakého výrazu, nejsou k dispozici proměnné, místo cyklů je rekurze.

    Haskell:
    sumOneToN :: Int -> Int
    sumOneToN n = if (n <= 0) then 0
                              else (n + (sumOneToN (n-1)))
    
    Dále, ve funkcionálních jazycích jsou funkce "first class citizens", tj. můžou být předávány jiným funkcím jako parametry a také vraceny jako výstupní hodnoty. Třeba zde značí . operátor, který vezme 2 funkce a vrátí jejich kompozici (pokud je to typově možné).
    sumOneToSqrN :: Int -> Int
    sumOneToSqrN = sumOneToN . (\n -> n*n)
    
    No prostě jsou to samé pěkné věci. ;-)
    24.6.2006 21:24 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Python a vůbec
    Dále, ve funkcionálních jazycích jsou funkce "first class citizens", tj. můžou být předávány jiným funkcím jako parametry a také vraceny jako výstupní hodnoty. Třeba zde značí . operátor, který vezme 2 funkce a vrátí jejich kompozici (pokud je to typově možné).
    To znamená, že ukazatele v C umožňují funkvionální programování i v něm? ;-)
    When your hammer is C++, everything begins to look like a thumb.
    24.6.2006 21:48 Radek Šlesinger | skóre: 13 | Adamov
    Rozbalit Rozbalit vše Re: Python a vůbec
    To jsou mi teda věci, to abych se na ten jazyk podíval. :-)
    27.6.2006 09:57 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Vždyť je to úplně přirozené, když jde v C naprogramovat haskell, tak proč by nemělo jít funkcionálně programovat v C? Jen ten zápis je takový ... ehm. V jakémkoli jazyce s vyjadřovací schopností Turingova stroje lze použít jakékoliv programovací paradigma, které lze na takovém stroji realizoavt, že? :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    24.6.2006 21:05 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Python a vůbec
    Nechci schladit tvoje nadšení, ale funkcionální programování v Pythonu je až něco navíc ... neříkám, že to nejde, ale není to ono. Primárně je to oop jazyk, který ovšem umožňuje používat i procedurální paradigma (což je něco, co nenávidím na Javě, která to tak jednoduše neumožňuje).
    When your hammer is C++, everything begins to look like a thumb.
    24.6.2006 21:55 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Python a vůbec
    public class neco {
      public static void main (String args []) {
        //tady jsou procedurální draci :-)
      }
    }
    
    A je to, ne? :-) (dělám si pochopitelně srandu :-))
    Copak toho není dost?
    24.6.2006 22:09 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Python a vůbec
    Přesně tak, ten syntaktický cukr v Javě poměrně často zhořkne :-D
    When your hammer is C++, everything begins to look like a thumb.
    24.6.2006 12:40 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Chápu, že map, filter a apply, ale proč lambda?
    map(lambda x:x*2, a)
    nahradím
    [x*2 for x in a]
    nebo
    filter(lambda x:x%2, a)
    nahradím
    [x for x in a if x%2]
    ale co třeba
    a={'a':1, 'b':3, 'c':2}
    [ key for key, value in sorted(a.iteritems(), key=lambda x:x[1])]
    to se dá nahradit kostrbatým
    def getValueFromPair(x): return x[1]
    [ key for key, value in sorted(a.iteritems(), key=getValueFromPair)]
    del getValueFromPair
    ale proč to dělat jednoduše, když to jde složitě, že. Jen podotýkám, že
    [ key for value, key in sorted((value, key) for key, value in a.iteritems())]
    není totéž, i když skoro.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    24.6.2006 12:44 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    mezi definicí té funkce a použitím musí být volný řádek. Někde se mi to stratilo.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    24.6.2006 13:15 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Myslím, že jsme se o tom tudlevá bavili. Jde tedy o to, že mám slovník a chci získat jeho klíč i hodnotu setřídené podle hodnoty, že? Možnosti jsou v principu dvě:
    1) Získat klíče a ty si schovat do nového listu(což vezme nějakou paměť). Tyto klíče setřídit podle hodnoty, přičemž během třídení je nutno vždy vyhledávat ve slovníku příslušnou hodnotu. Pak sekvenčně procházet setříděné klíče a opět vyhledávat příslušnou hodnotu.

    2) Zkonvertovat slovník na seznam, kde klíč a hodnota budou vždy nějak pospolu. To sežere (na okamžik) víc paměti než v přechozím případě. Pak tento seznam setřídit. Pak ho procházet sekvenčně a získávat (bez vyhledávání) klíč i hodnotu.

    První způsob lze napsat třeba takto:
    keys = d.keys()
    keys.sort(key = d.__getitem__)
    for key in keys:
        res = key, d[key]
    
    Zatímco druhý způsob (který jsi tehdy nazval opičárnou)
    pairs = [(v, k) for (k, v) in d.iteritems()]
    pairs.sort()
    for v, k in pairs:
        res = k, v
    
    První způsob je dvakrát rychlejší (což mě celkem překvapuje) a bere míň paměti. Ale zase se mi tam moc nelíbí to __getitem__. :-(
    Těžko říct, co je čitelnější a co je ona jediná Správná Cesta. Ale oba způsoby jdou napsat bez lambdy.
    24.6.2006 13:35 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    První způsob lze ještě přepsat na
    for key in sorted(d.keys(), key= d.__getitem__):
      res = key, d[key]
    
    (netvrdím, že je to lepší). S tím druhým (alias opičárnou) se mi nic vymyslet nepodařilo.
    24.6.2006 15:31 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Jenže tady je právě zakopanej pes a dost páchne.

    ad 1) Co když d vlastně neexistuje, ale je to třeba dict(<generátor>). To se pak jde funkcionální programování klouzat, protože to nejde udělat bez explicitního uložení toho seznamu.

    ad 2) Tak to právě dělá ten poslední příklad na který upozorňuji, že nedělá totéž, zkus si to třeba na na dict((x, len(x)) for x in ('a', 'b', 'c', 'd', 'e')), Vtip je v tom, že nechci řadit podle (hodnota, klic), ale jen podle hodnoty ať už z jakéhokoli obskurního důvodu.

    A proč je to první méně náročné na paměť? No tak to bych si typnul, že to bude tím, že uložení listu skalárů zabare míň místa, než uložení listu tuple. A proč je to rychlejší, no tak za to může zase betálně rychlé vyhledávání v dict. Si pamatuju jak jsem byl překvapený jak je to rychlé v perlu.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    26.6.2006 04:04 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Jenže tady je právě zakopanej pes a dost páchne. ad 1) Co když d vlastně neexistuje, ale je to třeba dict(<generátor>). To se pak jde funkcionální programování klouzat, protože to nejde udělat bez explicitního uložení toho seznamu.
    To si nějak neumím představit, ale asi máš recht. IMHO bez předchozího uložení je slovník trochu k ničemu, ale třeba jsou výjimky ...
    ad 2) Tak to právě dělá ten poslední příklad na který upozorňuji, že nedělá totéž, zkus si to třeba na na dict((x, len(x)) for x in ('a', 'b', 'c', 'd', 'e')), Vtip je v tom, že nechci řadit podle (hodnota, klic), ale jen podle hodnoty ať už z jakéhokoli obskurního důvodu.
    Jo, aha.
    Tak jsem dal dohromady všechny dosavadní poznatky a dospěl k tomuhle řešení
    def getValueFromPair(x): return x[1]
    
    items = d.items()
    items.sort(key = getValueFromPair)
    for k, v in items:
        res = k, v
    
    Zjišťoval jsem, jak dlouho se vyhodnocují různé varianty a tohle je druhé nejrychlejší (asi o 30% pomalejší než key=d.__getitem__). Je to asi ta nejkostrbatější možnost, ale mě se líbí. Ale já jsem byl vždycky divnej. Dal by se ušetřit řádek, kdybych použil sorted(), ale žere to paměť a byla by škoda zbytečně zahodit ten setříděný seznam.
    26.6.2006 09:03 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Dal by se ušetřit řádek, kdybych použil sorted(), ale žere to paměť a byla by škoda zbytečně zahodit ten setříděný seznam.
    Právě že sorted žádnou paměť navíc nežere, ale musí se použít iterátor, tedy ne items, ale iteritems, případně iterkeys.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    26.6.2006 09:33 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Měl jsem na mysli sorted() versus sort(). Sort je k paměti šetrnější, protože nemusí vytvářet kopii seznamu -- a doufám, že to nedělá. Mění ten seznam přímo. Zatímco sorted vrací setříděnou kopii a původní pole nechá beze změny.:
    >>> import random
    >>> a = range(10)
    >>> random.shuffle(a)
    >>> b = sorted(a)
    >>> a
    [3, 2, 1, 5, 7, 8, 0, 4, 6, 9]
    >>> b
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> a.sort()
    >>> a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    26.6.2006 10:01 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Ano o tom není sporu, že použít sorted na již hotový list je hloupost, já jen tvrdím, že mezi zápisem
    a = [<iterátor>]
    a.sort()
    a zápisem
    a = sorted(<iterátor>)
    není žádný rozdíl co do spotřeby paměti viz. např.
    a = file('<filename>','r').readlines()
    a.sort()
    a
    a = sorted(file('<filename>','r'))
    
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    26.6.2006 14:44 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    ... já jen tvrdím, že mezi zápisem
    a = [<iterátor>]
    a.sort()
    a zápisem
    a = sorted(<iterátor>)
    není žádný rozdíl co do spotřeby paměti...
    To, že je to iterátor, podle mě nemá na nic vliv. Jestliže napíšu
    #!/usr/bin/env python
    import random
    
    a = range(5)
    random.shuffle(a)
    print a
    
    def gimme_next():
        for i in a:
            print 'Yielding: ', i
            yield i
    
    def compare(a, b):
        print 'Comparing:', a, b
        return cmp(a,b)
    
    
    b = sorted(gimme_next(), compare)
    print b
    
    Tak se
    1) pomocí iterátoru se získá celý seznam
    2) tento seznam se zkopíruje
    3) zkopírovaný seznam se setřídí
    4) původní seznam se zahodí, protože už na něj není reference

    Takže v bodě 2 a 3 existují v paměti _dva_ seznamy. Bohužel, nemám pro své tvrzení žádný přímý důkaz. Snad jen to, že
    items = sorted(d.iteritems(), key = getValueFromPair)
    
    je pomalejší než
    items = d.items()
    items.sort(key = getValueFromPair)
    
    27.6.2006 09:36 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    1) pomocí iterátoru se získá celý seznam
    2) tento seznam se zkopíruje
    3) zkopírovaný seznam se setřídí
    4) původní seznam se zahodí, protože už na něj není reference
    A pro toto tvrzení v bodě 2) máte nějaký důkaz, nebo jste si to jen tak typnul? No jasně že ne: Bohužel, nemám pro své tvrzení žádný přímý důkaz. Jestli se to tak děje, tak by se autor implementace sorted měl pověsit za koule do průvanu. Není totiž nejmenší důvod to implementovat jinak, než prostě nekopírovat a jednoduše použít ten seznam získaný v bodě 1). Experimentálně se mi zdá, že je tam drobný rozdíl v rychlosti, ale ten je rozhodně menší než co mi vzniklo, když jsem jsem tu kopii udělal schválně. Rzdíl mezi sorted a .sort mi vyšel 4.4% a mezi .sort a .sort s kopií navíc je 11.2% tedu více než dvojnásobný.
    d=dict((x, random.randint(0,100)) for x in xrange(100))
    
    def useSorted():
        a = sorted(d.iterkeys(), key=d.__getitem__)
    
    def useSort():
        a = d.keys()
    
    def useSortAndCopy():
        a = d.keys()
        a.sort(d.__getitem__)
        b = a[:]
    
    
    Jediný důvod co mě napadá je ten, že a = d.keys() je rychlejší než a = [x for x in d.iterkeys()]. Funkce sorted může být (bez reversed) klidně implementována takto:
    def sorted(seq, **argv):
        a = [x for x in seq]
        a.sort(**argv)
        return a
    
    Ve skutečnosti jsou tam ještě nějaké opičky s reversed, ošetření vstupních parametrů a ještě ke všemu implementace možná v C.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    27.6.2006 11:24 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Funkce sorted může být (bez reversed) klidně implementována takto:
    def sorted(seq, **argv):
        a = [x for x in seq]
        a.sort(**argv)
        return a
    
    Máš recht. No jasně. To jsem sám rád, že se ten seznam neduplikuje.
    24.6.2006 14:34 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Bez ohledu na rychlost mi zatím funguje tohle:

    d.sort_by{|x| x[1]}.map{|x| x[0]}

    Radši to nebudu benchmarkovat, sort_by se slovníkem dělá pěkné neplechy... ;-)
    Mikos avatar 24.6.2006 14:37 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Můžu se zeptat proč do diskuze o Pythonu taháš Ruby? ;-)
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    24.6.2006 14:52 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Páč jsem blbej a nic jinýho neumím? :-D Ne, mně spíš překvapuje, že ani jedno z těch pythonovských řešení mi nepřijde nijak supersrozumitelné. :-) Myslel jsem, že na tohle bude v Pythonu přímo nějaký idiom.
    Mikos avatar 24.6.2006 15:18 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Pokud se budu držet původního zadání, tak:
    In [14]: [k for k in sorted(a.keys(), key=a.__getitem__)]
    Out[14]: ['a', 'c', 'b']
    Což mi přijde srozumitelné dostatečně :-)
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    24.6.2006 15:38 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    No já jsem puntičkář, takže
    [k for k in sorted(a.iterkeys(), key=a.__getitem__)]
    ale to je detail :-) Jinak to má ale ten zádrhel, že si to neporadí s ad hoc generovaným dict, nebo vráceným třeba z funkce a nechci si ho někam ukládat. Když tak nad tím přemýšlím, tak mě nenapadá realný příklad, kde by to bylo potřeba :-) Krom toho ve 2.5 přichází with, ale moc jsem ho nepochopil, tak nevím jestli to není zrovna lék na tohle.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    26.6.2006 03:16 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    ... mně spíš překvapuje, že ani jedno z těch pythonovských řešení mi nepřijde nijak supersrozumitelné. :-)
    Záleží na tom, jak je v kdo zvyklý. A především záleží na tom, jak se to napíše. U méně přehledných částí kódu vždy pomůžou komentáře nebo alespoň vhodný název funkce, třeba sort_dict_by_value().
    Myslel jsem, že na tohle bude v Pythonu přímo nějaký idiom.
    Idiom pro to není. Kupodivu se tohle téma řešilo už před pěti lety v PEP 265:
    http://mail.python.org/pipermail/python-dev/2001-August/017143.html
    A objevilo se několik zlepšovacích návrhů. Guido van Rossum (hlavní vývojář Pythonu) všechno zamítl s tím, že to není nezbytně nutné a nestojí to za to.
    V tomto případě s ním plně souhlasím. Odmítl dokonce možnost
    items = d.items(values_first=0)
    
    která by obrátila pořadí v tuplech u vytvářeného seznamu. I když je to asi dobrá myšlenka, při přidávání featur do jazyka je potřeba být _VELMI_ opatrný (musí se spravit dokumentace všude možně, zastarají knihy, přestanou platit doporučené způsoby atd.)
    26.6.2006 03:01 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Chápu, že map, filter a apply, ale proč lambda?
    Můžu se zeptat proč do diskuze o Pythonu taháš Ruby? ;-)
    Ále, však ho nechme. Sám jsem taky zaplevelil Pythonem několik diskusí o shellu. A nehodlám s tím přestat :-)
    24.6.2006 22:10 python2 | skóre: 4
    Rozbalit Rozbalit vše Re: Python a vůbec
    Lambda v pythonu zustane.
    26.6.2006 03:36 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Je pravda, že jsem nikde nenašel konkrétní rozhodnutí, jestli tam zůstane nebo ne. Ale Guido van Rossum by se jí rád zbavil:
    http://www.advogato.org/article/846.html
    Vždy je možné se bez lambdy obejít a napsat jednořádkovou funkci:
    def compare(a, b): return cmp(a[1], b[1])
    
    items = d.items()
    
    s lambdou: items.sort(lambda x,y:cmp(x[1], y[1]))
    bez lambdy: items.sort(compare)
    
    Lambda dokáže ušetřit jeden řádek kódu, ale v Pythonu vznikla spíš z historických důvodů, aby Python někdo nepomluvil, že není dost funkcionální.
    Rád bych podotkl, že zápis s lambdou je sice stručnější, ale lambda je pomalejší než jednořádková funkce.
    26.6.2006 04:41 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Aha, už jsem to našel:
    http://mail.python.org/pipermail/python-dev/2006-February/060415.html
    Takže máte pravdu -- lambda v Pythonu zůstane. Víceméně proto, aby ustaly hádky o jiném řešení.
    26.6.2006 08:58 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Rád bych podotkl, že zápis s lambdou je sice stručnější, ale lambda je pomalejší než jednořádková funkce.
    Tak když jsem tohle četl, tak jsem tomu nemohl uvěřit a je to blbost nebo je rozdíl menší než 1%. To by bylo teda pěkně pitomě implementováno. Krom toho přímo v dokumentaci říkají, že lambda je jen zkratka pro takovou jednořádkovou funkci.
    import os, itertools, random
    
    d=dict((x, random.randint(0,100)) for x in xrange(10000))
    
    def timeItDet(func, n=1000):
         start = os.times()
         for x in itertools.repeat(None, n):
             func()
         return tuple(x-y for x, y in itertools.izip(os.times(), start))
    
    def doItSmart():
        sortedKeysByValues = sorted(d.iterkeys(), key=d.__getitem__)
    
    def withLambda():
        items = d.items()
        items.sort(lambda x, y: cmp(x[1], y[1]))
    
    def withoutLambda():
        def cmpValues(a, b): return cmp(a[1],b[1])
        items = d.items()
        items.sort(cmpValues)
    
    timeItDet(doItSmart,100)
    (2.1699999999999875, 0.020000000000000018, 0.0, 0.0, 2.1899999999995998)
    
    timeItDet(withLambda,100)
    (15.830000000000013, 0.040000000000000036, 0.0, 0.0, 15.859999999999673)
    
    timeItDet(withoutLambda,100)
    (15.829999999999984, 0.010000000000000009, 0.0, 0.0, 15.840000000000146)
    
    
    Měřil jsem to víckrát a ten rozdíl je na hranici měřitelnosti.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    26.6.2006 09:20 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    U mě ten rozdíl dělá něco přes dvě procenta. Celkem reprodukovatelně. Je mi to taky divný. Ještě se na to podívám. Ale pro jistotu tedy změním svoje tvrzení - lambda není rychlejší.
    26.6.2006 09:36 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Použil jste stejnou metodologii? On je rozdíl mezi:
    def f(): return <expression>
    <mesure start>
    <repeat>: test(f)
    <mesure stop>
    
    <mesure start>
    <repeat>: test(lambda: <expression>)
    <mesure stop>
    a
    <mesure start>
    <repeat>:
        def f(): return <expression>
        test(f)
    <mesure stop>
    
    <mesure start>
    <repeat>: test(lambda: <expression>)
    <mesure stop>
    
    V tom prvním případě musí lambda samozřejmě prohrát :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    26.6.2006 11:09 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    V tom by mohlo být jádro pudla. Ale nepoužívám opakované třídění. Třídím pouze jednou, ale zato velký seznam, takže lambda je trochu v nevýhodě.
    27.6.2006 09:44 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Čím je ten seznam delší, tím v menší nevýhodě by měla ta lambda být. To bude asi ještě v něčem jiném.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    26.6.2006 09:40 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: Python a vůbec
    Vždy je možné se bez lambdy obejít a napsat jednořádkovou funkci
    - v Python nejsou funkce vracející funkce (nově vytvořené na základě parametrů)? To mi přijde jako ten případ, kdy se lambda za pojmenovanou funkci nahradit nedá...
    26.6.2006 09:58 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Měl jste na mysli něco takového?
    #!/usr/bin/env python
    def nova_funkce(param):
        def odecti(a, b):
            return a - b
        def pricti(a, b):
            return a + b
        if param == 'odecti':
            retvalue = odecti
        elif param == 'pricti':
            retvalue = pricti
        else:
            raise SystemExit, "Spatny nazev funkce"
        return retvalue
    
    f = nova_funkce('odecti')
    print f(5, 3)
    f = nova_funkce('pricti')
    print f(5, 3)
    
    Nebo jde o něco složitějšího?
    26.6.2006 10:17 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: Python a vůbec
    Půjde takhle bez lambdy i tohle? (nemám po ruce python, jinak bych vyzkoušel sám)
    def pricti_n(n):
        def pricti(a):
            return a + n
        return pricti
    
    f = pricti_n(3)
    print f(5) => 8
    
    26.6.2006 11:03 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Dal jsem to do Pythonu a vyhodilo to osmičku. Tak to asi funguje. :-)
    26.6.2006 11:23 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: Python a vůbec
    Aha, tak to si zlepšuju názor na Python. Proč jsem si myslel, že v tom je problém? :)

    Asi zagooglím python closures...
    26.6.2006 10:12 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Python a vůbec
    Z funkce lze vrátit libovolný objekt, tedy i funkci alébržto funkce je taky objekt :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.