abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:55 | Nová verze

    Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

    Ladislav Hagara | Komentářů: 0
    včera 17:33 | Nová verze

    Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.

    Ladislav Hagara | Komentářů: 5
    včera 17:11 | Komunita

    Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.

    Ladislav Hagara | Komentářů: 2
    včera 12:55 | Nová verze

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 11:22 | Zajímavý článek

    David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …

    Ladislav Hagara | Komentářů: 5
    30.5. 22:44 | Nová verze

    Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.

    Ladislav Hagara | Komentářů: 0
    30.5. 21:22 | Zajímavý článek

    Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:44 | Pozvánky

    V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:22 | Nová verze

    Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 12
    29.5. 22:11 | Nová verze

    Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.

    Ladislav Hagara | Komentářů: 7
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (90%)
     (3%)
     (4%)
     (4%)
    Celkem 1062 hlasů
     Komentářů: 17, poslední včera 15:31
    Rozcestník
    Štítky: není přiřazen žádný štítek


    Vložit další komentář
    23.6.2014 14:23 lopuch
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Foreach cyklus s podmienkou prázdneho poľa
    To jsem neznal, díky
    23.6.2014 15:32 janik | blog: janko
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Akurát to nefunguje. for-else má v Pythone iný význam.
    Python 3.3.3 (default, Mar 27 2014, 16:17:16) 
    Type "copyright", "credits" or "license" for more information.
    
    IPython 1.2.1 -- An enhanced Interactive Python.
    ?         -> Introduction and overview of IPython's features.
    %quickref -> Quick reference.
    help      -> Python's own help system.
    object?   -> Details about 'object', use 'object??' for extra details.
    
    In [1]: kosik = ["mlieko", "maslo"]
    
    In [2]: for produkt in kosik:
       ...:     print(produkt)
       ...: else:
       ...:     print("Prazdny nakupny kosik")
       ...:     
    mlieko
    maslo
    Prazdny nakupny kosik
    23.6.2014 16:38 lopuch
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Pravda:
    the else suite is executed after the for, but only if the for terminates normally (not by a break).
    To je dost rozdíl :-(
    mirec avatar 23.6.2014 17:41 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Diky za upozornenie, uvedenú konštrukciu často používam jinja2, tam sa skutočne vykoná pri prázdnom poli. Nejako mi nevyšiel čas na skúšanie kódov ;)
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    23.6.2014 14:46 P.
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Pěkný, v PHP části bych trochu zestručnil načítání souboru.

    $rows = array_map(
      function($r) { return str_getcsv($r); },
      explode("\n", file_get_contents('produkty.csv'))
    );
    $header = array_shift($rows);
    foreach ($rows as $row) {
      $produkt = (object)array_combine($header, $row);
      echo "{$produkt->nazov} - {$produkt->cena} EUR\n";
    }
    
    mirec avatar 23.6.2014 18:04 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Vcelku elegantné riešenie, požičal som si do príkladu rozsekanie na hlavičk a zvyšok. Načítanie takýmto spôsobom mi na poslednom volaní funkcie vyhadzuje varovanie, editor mi ukladá na konci súboru "\n" čo spôsobí načítanie prázdneho riadku a volanie array_combine s prázdnym riadkom nemá moc zmysel. Po nasledovnej úprave to funguje aj u mňa:
    $rows = array_map(
      function($r) { return str_getcsv($r); },
      explode("\n", rtrim(file_get_contents('produkty.csv')))
    );
    $header = array_shift($rows);
    foreach ($rows as $row) {
      $produkt = (object)array_combine($header, $row);
      echo "{$produkt->nazov} - {$produkt->cena} EUR\n";
    }
    
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    lucorp avatar 23.6.2014 15:13 lucorp | skóre: 3 | blog: Konverzia stavbára na ajťáka | Bratislava
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    v PHP mozes "Zistenie prítomnosti kľúča v asociatívnom poli" spravit ako if($pole[kluc])

    V tomto pripade je to presne to iste co si uviedol pre python

    "Vyčíslovať straty na predajoch za pirátske kópie je ako vyčíslovať o koľko deti prichádzame masturbáciou..."
    lucorp avatar 23.6.2014 15:21 lucorp | skóre: 3 | blog: Konverzia stavbára na ajťáka | Bratislava
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    tiez "Posledný prvok poľa" nacitas ako end($pole)

    ale inak super clanok, ako cloveku co pisem v php aj pythone mi rozsiril obzory :)

    "Vyčíslovať straty na predajoch za pirátske kópie je ako vyčíslovať o koľko deti prichádzame masturbáciou..."
    23.6.2014 15:39 P.
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    v PHP mozes "Zistenie prítomnosti kľúča v asociatívnom poli" spravit ako if($pole[kluc])

    člověk ale musí vědět přesně, co chce (z hlediska očekávaných hodnot v poli), např.
    $a = array('a' => 0, 'b' => null, 'c' => 1);
    foreach (array_keys($a) as $k) {
      if ($a[$k]) echo "$k\n";
    }
    
    mirec avatar 23.6.2014 17:46 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Konštrukcia if($pole[kluc]) bude ak neexistuje kľúč generovať varovanie. Okrem toho ak $pole[kluc] sa vyhodnotí ako false potom to bude vyzerať ako keby kľúč nebol v poli. Celkom schodnou cestou je operátor isset.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Luk avatar 23.6.2014 18:08 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Pokud se nepoužívá isset a rve se to tam "natvrdo", má to velmi negativní dopady na výkon.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    23.6.2014 18:36 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Použícat if($pole[kluc]) je dost kravina (jak bylo už naznačeno).
    $a = array(false, NULL, 0);
    echo "${a[0]} - ${a[1]} - ${a[2]}";
    if( $a[0] || $a[1] || $a[2] ) {
      echo "Aspoň jeden existuje.\n";
    }
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Luk avatar 23.6.2014 19:17 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    To samozřejmě. Jen jsem chtěl říct, že i když to "funguje", silně to degraduje výkon.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    23.6.2014 20:09 Kvakor
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Právě z tohoto důvodu je v PHP i funkce array_key_exists(), kjterá by měla být efektivnější než isset() (i když podle toho, co jsem kdysi zkoušel, v tom velký rozíl nebyl).

    Jinak na rozpoznání toho, jestli funkce vrací false, protože se na to převedla výsledná hodnota, nebo false, protože nic nenašla, je operátor ===, viz Comparison Operators.
    23.6.2014 20:35 sigma
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Tady pozor na to, že isset() u klíče, jehož hodnota je NULL, vrací false. Kdežto array_key_exists() v takovém případě vrací true! Viděl jsem z toho nepěkné bugy.
    Luk avatar 23.6.2014 20:41 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Právě z tohoto důvodu je v PHP i funkce array_key_exists(), kjterá by měla být efektivnější než isset() (i když podle toho, co jsem kdysi zkoušel, v tom velký rozíl nebyl).

    Ve skutečnosti je zřejmě výrazně méně efektivní. Problém u isset() je v tom, že pokud je hodnota v poli NULL, je výsledkem FALSE. V případech, kdy by to vadilo, lze použít array_key_exists() nebo oba přístupy kombinovat, čímž se dosáhne vcelku slušné rychlosti.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    30.6.2014 12:48 Kozzi11
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    pozor prave ze array_key_exists je snad skoro vzdy pomalejsi nez isset, ale je to vetsinou ta spravna volba. Jelikoz jak jiz bylo receno isset vracit false i v pripade kdu je hodnota v poli pro dany klic null
    Josef Kufner avatar 30.6.2014 14:42 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Na druhou stranu se někdy hodí, pokud null a neexistující prvek pole jsou považovány za totéž. Například při načítání konfigurace takto lze přepsat nastavenou hodnotu na "nenastaveno", pokud je výsledná konfigurace dána složením několika souborů (default knihovny, nastavení aplikace, nastavení konkrétní instalace).

    V mnoha dalších případech je vhodné použít !empty(), což sice nerozlišuje mezi chybějící a nulovou hodnotou, ale pokud chci vědět, zda tam něco je, tak je to dobrá volba (isset(false) == true, ale !empty(false) == false).

    V případech, kdy se hodí použít array_key_exist() je často možné místo null použít false a pak funguje isset(). Například pokud chci kešovat objekty v poli a je potřeba nakešovat informaci o neúspěšném pokusu o vytvoření.
    Hello world ! Segmentation fault (core dumped)
    pavlix avatar 30.6.2014 15:18 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Tyhle prasárny jsou přesně věci, co se mi na PHP nelíbí. Ať už je to příliš divoká konverze jako řetězec se znakem nula na boolean, nešikovné míchání asociativních a sekvenčních polí (což mě mimochodem překvapilo i u jazyku Lua), nejasné rozlišování mezi absencí hodnoty a null. Přišlo mi že v Pythonu nebyly až takové prasárny jako v PHP a i tak byly dost aktivně čištěny při přechodu na verzi 3.x.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Josef Kufner avatar 30.6.2014 17:25 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Jo, chtělo by to pořádně pročistit. Ale do PHP6 je ještě moře času.
    Hello world ! Segmentation fault (core dumped)
    pavlix avatar 30.6.2014 17:36 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Mohli by třeba vydat Python 3.6 jako PHP 6 ;).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.6.2014 18:03 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Nehroť to, ubyl by mi z portfolia jazyk, kterým aspoň nějak vládnu…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    pavlix avatar 30.6.2014 18:04 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Na portfolia programovacích jazyků už si nikdo nehraje ;).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.6.2014 18:09 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Někdo přece, třeba já.
    Ale pokud by PHP 6 aka Python 3.6 mělo jen středník a formátovat bych si mohl jak chtěl - sem s tím, tomu se nebráním :-).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Josef Kufner avatar 23.6.2014 22:52 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Pro tyto případy se hodí zavináč, ale obvykle bývá lepší !empty(). Těch způsobů je několik a každý se chová trošku jinak.
    // $k je hledaný klíč v poli $a.
    if (array_key_exists($k, $a)) // $k existuje, na hodnotě nezáleží
    
    if (isset($a[$k])) // $k je v poli a hodnota není null
    if (@ $a[$k] !== null) // totéž
    
    if (!empty($a[$k])) // $k je v poli a hodnota je neprázdná (není to null, false, 0, '', array())
    if (@ $a[$k]) // totéž
    
    Přičemž array_key_exists je nejpomalejší, neboť je to jediné plné volání funkce a ostatní jsou jazykové konstrukce. (Nejsem si jist, zda to nebylo v posledních verzích optimalizováno; v 5.3 to tak bylo.)

    Další docela elegantní konstrukce je toto:
    $y = @ $k[$v];
    Docela rád toto používám při načítání konfigurace např. z JSON, kdy volba nemusí být uvedena a výchozí hodnota je null či false.
    Hello world ! Segmentation fault (core dumped)
    Luk avatar 24.6.2014 00:23 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Dělá ten zavináč ještě něco jiného, než že potlačuje varování? AFAIK ne a má docela slušnou režii, takže výrazně zpomaluje.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    Josef Kufner avatar 24.6.2014 12:18 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Režii nemá, naopak čas šetří. Ovšem ta operace neúspěšného hledání je nějaká pomalá... Udělal jsem si jednoduchý benchmark:

    Čas je za 10 spuštění 1 milionu iterací. "code" je čistý čas strávený v cyklu.
    $ code='if (isset($a[$i])) { $y += $a[$i]; }' ; time for f in `seq 1 10` ; do php -r '$a = array(); $y = 0; $start = microtime(true); for ($i = 0; $i < 1000000; $i++) { '"$code"' }; echo (microtime(true) - $start), "\n";' 2> /dev/null ; done | awk '{ total += $1 } END { print "code\t" total "s"}'
    code    0.760216s
    real    0m1.380s
    user    0m1.156s
    sys     0m0.204s
    
    $ code='if (!empty($a[$i])) { $y += $a[$i]; }' ; time for f in `seq 1 10` ; do php -r '$a = array(); $y = 0; $start = microtime(true); for ($i = 0; $i < 1000000; $i++) { '"$code"' }; echo (microtime(true) - $start), "\n";' 2> /dev/null ; done | awk '{ total += $1 } END { print "code\t" total "s"}'
    code    0.973294s
    real    0m1.599s
    user    0m1.356s
    sys     0m0.220s
    
    $ code='$y += @ $a[$i];' ; time for f in `seq 1 10` ; do php -r '$a = array(); $y = 0; $start = microtime(true); for ($i = 0; $i < 1000000; $i++) { '"$code"' }; echo (microtime(true) - $start), "\n";' 2> /dev/null ; done | awk '{ total += $1 } END { print "code\t" total "s"}'
    code    13.0701s
    real    0m13.690s
    user    0m13.448s
    sys     0m0.196s
    
    $ code='$y += $a[$i];' ; time for f in `seq 1 10` ; do php -r '$a = array(); $y = 0; $start = microtime(true); for ($i = 0; $i < 1000000; $i++) { '"$code"' }; echo (microtime(true) - $start), "\n";' 2> /dev/null ; done | awk '{ total += $1 } END { print "code\t" total "s"}'
    code    22.2458s
    real    0m22.862s
    user    0m20.560s
    sys     0m2.252s
    
    Tedy verze se zavináčem je oproti isset() 17× pomalejší, ale pořád dvakrát rychlejší než bez zavináče. Na druhou stranu je to v řádu desetin mikrosekund.
    Hello world ! Segmentation fault (core dumped)
    mirec avatar 24.6.2014 12:22 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Je to dôsledkom varovania (hoc nevypísaného).
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    mirec avatar 23.6.2014 17:49 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    Ešte k PHP-čku tak pozerám v histórii svojho PHP shellu túto perlu:

    $premenna = false;
    if (premenna && "a" == 0) {
      echo "Vypíšem sa!\n";
    }

    Mimochodom tento konkrétny kód sa u mňa vypíše bez varovania (jedine notice ale to kvôli istým "super" projektom mám vypnuté.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    23.6.2014 18:28 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    To není moc hezké, ale je to tak, nedefinovaná konstanta je brána jako "text" a neprázdný text je true, což umožňuje taky chod některých aplikací píšících array[my_text_key].
    No a 'a' se implicitně na číslo převede jako 0, chce to přidat jedno rovná se.

    Ony se různé perličky vyskytují v různých jazycích…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    23.6.2014 20:42 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Né, že by to bylo úplně ze stejného soudku, ale je to o „nerespektování základních pravidel“, nedávno jsem se nachytal takovou kravinou, už hodně dávno jsem napsal jednu fci:
        template<class Tint>
        static Tint randInteger(Tint max){
          Tint v;
          rand(reinterpret_cast<unsigned char *>(&v), sizeof(Tint));//get uchar random array
          if(v < 0)
            v=static_cast<Tint>(v*(-1));//positive only
          assert(v >= 0);
          return static_cast<Tint>(v % (max));
        }
    
    , která valila jednou za uherák s randInteger<int64_t>(cca_INT64_MAX); (nebo s unsigned typy) a dobré, ale nedávno jsme ji použil s randInteger<int8_t>(42); a najenou to začalo sem tam lítat na tom assert-u - hledíš jak čáp do trubky a nedocvakne ti to (teda já a mně ;-) ).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Bystroushaak avatar 23.6.2014 23:24 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Related: So You Want To Write Your Own CSV code? (+ relevantní reddit komentáře)
    24.6.2014 08:22 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Držím se zásady:
    CSV je tak jednoduché, že je lepší mít vlastní reader(writer) aby to fungovalo správně…
    …tady uvedené jsem bral jen jako ukázku něčeho jako CSV - je fakt že se píše že to parsuje CSV - což určitě není správně… :-)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    24.6.2014 09:01 user490
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    1. PHP podporuje anonymne funkcie takze vsetky priklady (Filtrovanie poľa, Zoradenie polda) kde mas funkcie ktore maju jeden z parametetrov inu funkciu mozese volat takto:

    $output = array_filter($p, function($p) { return ($p['cena'] < 10); });

    2. V PHP sa da da miesto kluc. slova "array" pouzivat kratsi zapis [] ekvivalent pythonovskym {}:

    Miesto: $a = array("hruska", "jablko", "slivka"); mozes napisat: $a = ["hruska", "jablko", "slivka"];

    Miesto: $a = array(); mozes pouzivat: $a = [];

    mirec avatar 24.6.2014 09:31 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    1. zápisom s lmabda funkciou takto v jednom riadku som sa vyhýbal zámerne kvôli šírke tabuľky

    2. [] je ekvivalent pythonovského [], {"a": "b"} je dictionary teda ekvivalent phpčkového array("a" => "b") (ten sa skrátene pokiaľ viem zapísať nedá).
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Josef Kufner avatar 24.6.2014 12:23 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    array() a [] je totéž. Tedy lze zapsat [1, 2, 3] a ['a' => 4, 'b' => 5, 'c' => 6]. Od PHP 5.4.
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 24.6.2014 12:25 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ad 1: PHP není Python, nalámání řádek nemá na kód vliv ;-)
    $output = array_filter($p, function($p) {
       return ($p['cena'] < 10);
    });
    Hello world ! Segmentation fault (core dumped)
    rADOn avatar 24.6.2014 10:16 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Jestě by se nechal přidat ternár, ať se phpčkaři taky jednou zasmějou.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    Bystroushaak avatar 24.6.2014 11:51 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Co je na inline ifu směšného?
    mirec avatar 24.6.2014 12:30 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    To s kolekciami moc nesúvisí. Inak je to jedna zo syntaktických blbostí v pythone ktorej som dlho nevedel prísť na chuť. Ale tak po pár mesiacoch písania viacej v pyhtone sa mi to zdá už celkom prirodzené ale používam tak raz za uhorský rok. Pre PHP-čkárov ak by teda chceli vedieť je tento kód v PHP:

    $cena = $produkt["cena"] == 0 ? "Nepredajné" : $produkt["cena"];

    Je ekvivalentný tomuto v pythone:

    cena = "Nepredajné" if produkt["cena"] == 0 else produkt["cena"]

    alebo

    cena = produkt["cena"] or "Nepredajné"
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Josef Kufner avatar 24.6.2014 12:46 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    A nebo v PHP:
    $cena = $produkt["cena"] ? : "Nepredajné";
    Hello world ! Segmentation fault (core dumped)
    pavlix avatar 24.6.2014 13:00 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    cena = produkt["cena"] or "Nepredajné"
    Toto funguje stejně i v Pythonu.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 24.6.2014 16:00 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Aha, ono to je v Pythonu, tak to pardon.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    24.6.2014 16:25 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ano, a nema se to tak delat! "Explicit is better than implicit."
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    mirec avatar 24.6.2014 17:00 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    Ako sa to tak vezme, kvôli určitým (v istých situáciách dosť nepríjemným) vlastnostiam pythonu je to veľmi veľmi veľmi užitočná konštrukcia (samozrejme v rozumnej miere). Ako príklad uvediem defaultné argumenty funkcie. Povedzme chcem napísať niečo takéto:

    def funkcia(argument=[]):
      ...

    Python však pracuje s referenciami (aj defaultný argument je referencia), takže pridanie prvku vo volaní funkcie by pri ďalšom volaní spôsobil, že by už defaultný argument bol [prvok]. Dá sa to vyriešiť 2 bežnými spôsobmi:

    def funkcia(argument=None):
      if argument is None:
        argument = [] # vytvorenie nového listu
      ...

    alebo:

    def funkcia(argument=None):
      argument = argument or []
      ...

    Pomerne často túto konštrukciu používam aj v djangu kde namiesto odporúčaného zápisu spracovania formulárov v dokumentácii:

    def view(request):
      if request.method == "POST":
        form = Formular(request.POST)
        if form.is_valid():
          return HttpResponseRedirect(form.save().get_absolute_url())
      else:
        form = Formular()
      return TemplateResponse(request, "sablona.html", {"form": form})

    používam takto:

    def view(request):
      form = Formular(request.POST or None)
      if form.is_valid():
        return HttpResponseRedirect(form.save().get_absolute_url())
      return TemplateResponse(request, "sablona.html", {"form": form})
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    pavlix avatar 24.6.2014 21:49 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    def funkcia(argument=None):
      argument = argument or []
    Zrovna toto se mi moc nelíbí, protože to prázdný seznam argumentu (při volání funkcia([])) nahrazuje novým prázdným seznamem a z kódu není zjevné, zda je to úmysl nebo chyba. Z toho důvodu bych zde dal přednost explicitnímu zápisu pomocí argument is None.
    form = Formular(request.POST or None)
    Toto mi naopak přijde fajn, protože jde jen o nahrazení prázdného request.POST za None.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 24.6.2014 21:41 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Házet poučkami je fajn, ale osobně tenhle zápis považuju pro Pythoního programátora za 100% srozumitelný. Jednou máme přesně definované vyhodnocení všeho možného na boolean, tak nevidím jediný důvod toho nevyužít. Ta vlastnost tam není pro srandu králíkům.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    rADOn avatar 25.6.2014 12:46 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Přesně tak. Taky jsem si na to chvíli zvykal ale pokud se to používá střídmě tak je to jednodušší a přehlednější než vypisovat ternár neřkuli if blok.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    xkucf03 avatar 27.6.2014 13:58 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Tohle je hlavně prasárna z důvodu, že se tu pletou různé datové typy. Cena je předpokládám číslo, zatímco "Nepredajné" je text. Pak třeba budou vznikat výstupy typu "Nepredajné Kč" nebo se někdo pokusí sčítat (násobit, dělit...) textové řetězce. Nemluvě o nějaké lokalizaci.

    Taková dynamičnost je na 99 % zlo a člověku se to vrátí jako bumerang ve chvíli, kdy to nečeká.

    Je lepší používat NULL, pokud stačí jeden význam pro chybějící hodnotu, nebo si vytvořit nějaký obalový objekt, který obsahuje buď hodnotu, nebo důvod, proč hodnota chybí (výčet).
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bystroushaak avatar 24.6.2014 13:23 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ještě existuje jeden ekvivalent, který šetří místo a tím je
    [produkt["cena"], "Nepredajné"][produkt["cena"] == 0]
    
    Ale to už je docela prasárna.
    24.6.2014 14:36 lopuch
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Až se mi z toho zauzlovala střeva :-D Zase třeba kompilátoru by to tak nevadilo
    24.6.2014 14:37 SPM | skóre: 28
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Takže zatímco u pythonu to má možná o pár znaků víc, ale je hned vidět co to dělá, tak php sic používá běžnej konstrukt, kterej jsem se ale doteď nenaučil, protože mi z těch znaků jde hlava kolem :)
    Bystroushaak avatar 24.6.2014 15:57 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ono těch znaků si zas tak moc pamatovat nepotřebuješ: ?:

    Prvně se na něco ptáš, tak tam dáš otazník:

    cena == 0 ?

    A když jo, tak hned odpověď. Když ne, tak alternativní odpověď, která něčím musí být oddělená, tak proč ne dvojtečkou?

    otázka ? odpověď : alternativa

    Zas tak složité to není :)
    mirec avatar 24.6.2014 15:59 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    A keďže to všetko stojí peniaze tak premenné obalíme dolármi ;)
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    25.6.2014 15:26 asdf
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    A jelikoz php mysli na pouzitelnost tak i operator ?: se chova jinak nez ve vsech jazycich kde existuje obdobny konstrukt.

    Viz treba:
    $arg = 'T';
    $vehicle = ( ( $arg == 'B' ) ? 'bus' :
                 ( $arg == 'A' ) ? 'airplane' :
                 ( $arg == 'T' ) ? 'train' :
                 ( $arg == 'C' ) ? 'car' :
                 ( $arg == 'H' ) ? 'horse' :
                 'feet' );
    echo $vehicle;
    
    Vysledkem je dle php "horse"
    pavlix avatar 25.6.2014 15:30 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Jen další potvrzení toho, jak je PHP debilní jazyk.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 25.6.2014 16:54 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Já nejvíc nemohl z toho, jak do verze 5.4 přidali možnost indexovat pole vrácené z funkce.
    echo func()[1];
    
    nešlo, zatímco následující kód fungoval:
    $a = func();
    echo $a[1];
    
    To se na první pohled nemusí zdát jako nic tak kritického, ale pokud jste si někdy psali vlastní jazyk, tak vám to nejspíš napoví, jak moc velká prasárna vevnitř musí dynamický jazyk být, aby mohl mít problémy tohohle typu.
    25.6.2014 18:08 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    OT: Když jsem psal svoje vlastní specifické jazyky, tak 1. neuměl fce ani pole a měl jen 0-99 globálních reálných, integer a text proměnných a neustále se interpretoval. No a druhý už se překládá, do mezi kódu( a je výrazně rychlejší než PHP včetně překladu/parsování) a umí podprogramy, uživatelské proměnné (definované typové, ale s implicitní konverzemi jako variant), 3D vectory a matice + operace a dokonce i pole :-), jenže k prvkům pole přistupuje pouze přes fce set a get, takže mně to zatím nelízlo :-(.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Bystroushaak avatar 25.6.2014 20:21 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Já si napsal jen lisp a kdybych programoval cokoliv dynamického, tak to lisp zase vevnitř bude, i když možná s jinou syntaxí na vstupu. Prostě snaha je z toho udělat AST a nad ním pak rekurzivně spustit engine.
    26.6.2014 15:16 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Jojo z nedovzdělanosti jsem o AST nic nevěděl, ale de-facto to tomu v 2. případě odpovídá i když implementačně tam mám zásadní krpu, o které jsem už tenkrát věděl, ale s různých důvodů jsem tak zvolil (v listu mám jednotlivé nody a místo aby to pochodovalo po ukazatelích, tak to jede přes indexi, ale zas se velmi jednoduše debaguje i parser i kód, bo tam vždy provolání přes „řídící“ prvek je by-design). Nicméně jsem zatím potřeboval hlavně řešil rychlost parseru vs. rozumně obskurní syntaxe, ale myslím, že to s dobou už padlo, takže na potřetí, bude-li, to může být i hezké :).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 25.6.2014 22:51 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    empty($riadok1.$riadok2);

    Parse error: syntax error, unexpected '.', expecting ')' in php shell code on line 1

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Josef Kufner avatar 26.6.2014 01:57 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    empty() není funkce. Na první pohled je to trošku divné, ale když si uvědomíš, co ta konstrukce dělá, tak to dává smysl.
    Hello world ! Segmentation fault (core dumped)
    mirec avatar 26.6.2014 07:38 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Empty je operátor a nedáva to zmysel ;) Patrí to medzi blbosti typu prečo nefungovalo funkcia()[].
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    25.6.2014 15:51 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Tak to je dvakrát nechutné, poprvé ten zápis a podruhé ten výsledek…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    pavlix avatar 25.6.2014 16:34 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ten zápis úplně až tak zle nevypadá. Pokud by se ho člověk jednou naučil, tak má k dispozici switch expression :). Ale pravda je, že v C to typicky píšu takto:
    const char *
    arg_to_string(char arg)
    {
        switch (arg) {
        case 'B':
            return "bus";
        case 'A':
            return "airplane";
        ...
        default:
            return "feet";
        }
    }
    
    int
    main(int argc, char **argv)
    {
        int arg = 'T';
        const char *vehicle = arg_to_string(arg);
    
        printf("%s", vehicle);
    }
    
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    25.6.2014 16:45 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    No právě, je to zápis na switch (PHP bere i řetězce na rozdíl od C, byť tady je to jen znak):
    switch($arg){
      case 'B': $vehicle='bus';      break;
      case 'A': $vehicle='airplane'; break;
      ...
      default : $vehicle='feet';     break;
    } 
    nebo to prdnout do fce a return, jak jsi napsal…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    rADOn avatar 26.6.2014 11:24 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    vehicle = {"B": "bus", "A": "plane", …}.get(arg, "feet")
    
    To snad jde v php napsat taky ne?
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    26.6.2014 15:33 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Nerozumím řeči tvého kmene, napsal jsem plný PHP switch a toto je asi nějaký Pythoní zápis nějaké kolekce (odpusť mou neznalost jazyka Python, nelíbí se mí a nepotřebuji jej), což bych do PHP asi přepsal takto (už to ale není funkční, ale datové):
    $a = Array("B" => "bus", "A" => "plane", …);
    $vehicle = isset($a[$arg])?$a[$arg]:"feet";
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Bystroushaak avatar 26.6.2014 15:57 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    {} v pythonu bežně označují asociativní pole (může to být i set, ale to teď vynechme).

    To co jsi popsal je ekvivalent:
    a = {"B": "bus", "A": "plane", ..}
    vehicle = a[arg] if isinstance(a, dict) else "feet"
    (to isset() má imho brát jen $a)

    V pythonu jsou ale operace s asociativními polemi velmi běžné, proto mají taky metodu .get(), která funguje stejně jako indexování přes hranaté závorky, ale zároveň má další argument, který se vrátí pokud není prvek nalezen.

    Ten příklad se dá tedy zkrátit do:
    a = {"B": "bus", "A": "plane", ..}
    vehicle = a.get(arg, "feet")
    26.6.2014 21:24 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    Řekl bych tedy, že fčul máme 4× téměř to samé (3× Python, 1× PHP), ale ne úplně související s if else if else…, což je ten původní zápis přes ?: nebo také swicth, který se obvykle||někdy takto rozkládá).

    Ne, to isset($a[$arg]) je rozhodně správně (na dvou řádcích nepochybuji o předchozím :), tedy oprávněně očekávám, že to pole existuje…) a mohlo by být zaměněno na in_array($a,$arg), pokud by to pole obsahovalo i NULL.

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Bystroushaak avatar 26.6.2014 22:30 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Aha, tady došlo k nepochopení toho isset() z mojí strany. V PHP už jsem nějaký pátek nedělal (a doufám ani nebudu).
    pavlix avatar 27.6.2014 08:09 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Proč isinstance?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 27.6.2014 10:21 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Špatně jsem pochopil ten jeho kód.
    pavlix avatar 27.6.2014 12:50 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Jo, už to vidím.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    rADOn avatar 27.6.2014 14:46 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ten kod mel delat totez co ten straslivej blok ternaru nebo switch, ale zpusobem kterej povazuju za rozumnejsi – a to i v php. Cimz jsem chtel jaksi naznacit ze debat jestli je lepsi hrouda ternatu nebo switch je tak nejak mimo :-)

    (poznamka pro phpckare: v pajtnu dokonce ani switch neni a nikomu se po nem nestyska.)
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    27.6.2014 20:23 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    PHP je to asi buřt výkonově, ale pokud v C/C++, tak je se třeba někdy rozhodovat, jestli to udělat konstantně funkčně, nebo universálně dynamicky a je spoustu případů, kde není třeba a je to spíš na závadu do toho tahat nějaké kolekce či fce a může to mít zbytečný dopad na výkon. Nebo představa, že třeba getopt pojedu např. přes map-u se mi vůbec nelíbí, ten switch je takový jasný a čitelný (a to platí i pro PHP).

    ( poznamka pro pythoňáky cítím s vámi :-) )
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 28.6.2014 09:02 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Přílohy:

    Ah ľudia, už tu nepíšte o výkone lebo ma z toho písania benchmarkov porazí ;-) Ale teraz vážne, trochu som sa teda pozrel na výkon týchto vecí v PHP a pythone, v prílohe malé benchmarky. Je to akože časť syntetizátora prirátávajúca amplitútu kanálov s predvypočítanou tabuľkou sinusovky. Teraz k výsledkom:

    PHP

    Pripočítanie referenčnej hodnoty (0.47): 0.96903800964355 s
                        Sekvencia if/elseif: 1.35397815704350 s
                           Asociatívne pole: 0.98258900642395 s
                           Zreťazený zoznam: 0.97372603416443 s
                                     Switch: 1.00940108299260 s

    Python

    Pripočítanie referenčnej hodnoty (0.47): 1.2208540439605713 s
                        Sekvencia if/elseif: 2.0121259689331055 s
                                       Dict: 2.0311729907989500 s
                                       List: 1.4741299152374268 s

    A teraz trochu nerovný súboj s alterantívnym interpretom pythonu - PyPy

    Pripočítanie referenčnej hodnoty (0.47): 0.04258298873901367 s
                        Sekvencia if/elseif: 0.26957798004150390 s
                                       Dict: 0.07034182548522949 s
                                       List: 0.04564189910888672 s
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    28.6.2014 22:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    Dobrý, a kde máš C/C++, kde se s polem dostaneš tak na 0.002 ;-).
    Shrňme to, pokud by toho bylo 10000×, tak:

    • PHP bez dvaceti minut 3 hodiny
    • Python 4 hodiny
    • PyPy 7.6 minuty
    • C++ 20sec
    ;-)

    Na takové věci jako v testu se switch určitě nehodí…

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 28.6.2014 22:57 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Mne to v C++ dáva 0.014s tj. 3x rýhlejšie než pypy. Ale v každom prípade ani pre PHP ani pre Python mi nerobí problém kritickú časť algoritmu prepísať do C.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    28.6.2014 23:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Kompiluj s -O3.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    28.6.2014 23:16 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Jo a oprav si, ten switch ;)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    28.6.2014 23:20 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Aj list…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    28.6.2014 23:53 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Pro info u mě (s opraveným PHP, Python jsem ty čísla v řádku opsal jen do sloupce):
                Python:    PHP:       C++  
       test_ref 0.7845039  0.7905121  0.0020001
        test_if 1.8836648  1.6659939  0.0065734
      test_dict 1.6601350  1.0982060  0.0428780
      test_list 1.2716641  1.6805291  0.0020001
    test_switch            1.7170250  0.0029277
     test_array                       0.0020000
    
    time (bash) pro první 4 testy:
                5.663      5.296      0.048
    
    PS: U C++ je pochopitelně procentní odchylka při opakovaných testech výrazná (je to moc malý vzorek a málo iterací) a není to ani průkazné pro srovnání jednotlivých testů.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 29.6.2014 15:20 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ako vyzerá opravený PHP kód?
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    29.6.2014 15:36 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Volá v test_list() $this->test_list() a v test_switch() $test->test_switch() ;-)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Luk avatar 28.6.2014 23:46 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Pro zajímavost: Java 7 je na tom podobně jako PyPy ;-)
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    28.6.2014 23:54 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Dej javu dám C++ :)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    xkucf03 avatar 29.6.2014 12:03 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku

    A co teprve Java 8, která mi při 100 000 opakováních dávala poloviční časy oproti 7 ;-)

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.6.2014 12:54 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Příloha:

    Tak jo, já začnu viz příloha (je to jen jednoduchý přepis toho PHP bez invence).

    Dej (dejte oba) Javu ;-)

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    29.6.2014 18:24 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Příloha:
    Kde jste s tou Javou? :),
    kdesi jsem tady o tom psal, tak mně napadlo to dát do mého IMSE (, který není ovšem na takové věci určený). Asociativní pole neobsahuje a ani switch a práce s polem je de-facto list, závorkové hodnoty jsou časy celkem včetně parsování. Bo IMSE je widle-only (IMSE snad ani ne, ale prostředí je v BCB6, takže je to spuštěné na virtuálu VW-32bit pod VMWare - ale na stejném stroji jak ostatní).
                Python:    PHP:       C++:       IMSE:
       test_ref 0.7845039  0.7905121  0.0020001  0.317491 (0.330483)
        test_if 1.8836648  1.6659939  0.0065734  1.076216 (1.087590)
      test_dict 1.6601350  1.0982060  0.0428780
      test_list 1.2716641  1.6805291  0.0020001  0.356221 viz popis
    test_switch            1.7170250  0.0029277
     test_array                       0.0020000  0.356221 (0.366114)
    
    time (bash) pro první 4 testy:
                5.663      5.296      0.048
    

    Evidentně je třeba u scrip. jazyků stále tlačit na vývoj a optimalizaci ;-).

    A aby i ti co si myslí, že nějaký jazyk má hnusnou syntaxi, přikládám zdroják aby věděli, že to může být i horší (na omluvu kdy to začalo vznikat, 32MiB RAM byla slušná paměť - já měl 8MiB)
    (Testy jsem komentoval, bo prostředí profiluje časy běhu, parsování a celkem, tak jsem to opsal).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 30.6.2014 11:03 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Syntax je to najmenej čo ma trápi u jazyka. Viacej ma trápi nekonzistentnosť. PHP som prestal používať pred mesiacom a už si pamätám totálne minimum. Názvy funkcií ešte ako-tak zvládnem, ale parametre ktoré majú a hlavne poradie parametrov absolútne fuč. Asi pol roka som používal PHP / Python tak 50:50 (v bývalej práci, pred mesiacom som odišiel), je až neuveriteľné koľko krát sa mi stalo že by mi v PHP niečo chýbalo ale opačne asi ani raz.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    30.6.2014 11:34 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Ty jsi ten test PHP i spouštěl?, ptám se proto, že nevím že je možné declarovat pole způsobem $sin_list = [ a nesežralo mi to, ale je fakt, že nemám kdovíjak novou verzi PHP.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 30.6.2014 12:37 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Mne to išlo spustiť inak by som namal žiadne výsledky. Tento spôosob definície poľa niekto spomenul tu v diskusii, ja som ani nevedel, že sa niečo také dá.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    mirec avatar 30.6.2014 12:38 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    A ehm ešte drobnosť, ja nie som zaťažený na nejaké nové verzie PHP, v práci som bol niekedy nútený používať PHP5.1 (dokonca aj historickú štvorku). Preto moje zápisy občas vyzerajú tak trochu archaicky.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Josef Kufner avatar 30.6.2014 14:44 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Zápis polí pomocí hranatých závorek je možný od verze 5.4. Přepiš to na array(). Je to totéž.
    Hello world ! Segmentation fault (core dumped)
    30.6.2014 15:15 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Myslíš, že bych uvedl výsledky testů a neopravil si to(?) ;-) (Stejně jak jsem opravil ty dvě chybná volání vytvořená pomocí copy&paste)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    rADOn avatar 30.6.2014 14:03 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Me se dokonce v pythonu zazacatku stavalo ze kdyz jsem neco nevedel tak jsem si nejak tipnul jak by to "logicky" melo byt… a ono to tak dost casto i bylo. To u PHP fakt nehrozi :-)
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    pavlix avatar 29.6.2014 15:05 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Kolekcie v pythone a PHP bok po boku
    Podle mě je dobré se alespoň snažit přidávat komentáře v kontextu.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.

    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.