Python - zbožňovaný lidmi?

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #135 kdy: 17. 09. 2017, 18:01:10 »
Myslíte něco jako typecheck dokorátor? Ten není moc použitelný. Kontrolovat za běhu, že pole intů je skutečně pole intů, by bylo dost neefektivní. Pro statickou kontrolu neslouží testy, ale nástroje jako Mypy.

Není náhodou Mypy jen jinou implementací dekorátorů pro typovou kontrolu? Pokud je to jen pro statickou typovou kontrolu, tak se IMHO jedná jen o sadu unifikovaných jednotkových testů, což samozřejmě není špatně.

ne. http://mypy-lang.org/


Aoidhghean

Re:Python - zbožňovaný lidmi?
« Odpověď #136 kdy: 17. 09. 2017, 18:03:14 »
Jenom na okraj, je třeba rozlišovat dynamické a statické typování. Python je silně dynamicky typovaný jazyk. V praxi se hodí oboje. Občas třeba šílím při tvorbě generických tříd ve staticky typovaném jazyku a přemýšlím, že bych tam vlastně chtěl mít možnost dynamických typů.
V takovém C++ je i dynamické typování, jen to není idiomatické.

Když už někdo touží po typech, ať použije dependent types, tam teprve začíná zábava.

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #137 kdy: 17. 09. 2017, 18:14:22 »
S pojmenovanými parametry je v některých jazycích trochu potíž. V PHP jsem to nahradil předáváním hodnot přes array a dost se mi to osvědčilo. Metoda si snadno zkontroluje, zda má všechna potřebná data a provede požadovanou akci.

Array se v PHP předává hodnotou (líná kopie), objekt odkazem. I to je dobré brát v potaz.

Takže k parametrům přistupuješ přes indexy toho pole? tyjo...

v PHP se slovník nazývá pole.

PHP má pro všechny kolekce jedinou datovou strukturu - je dobré je v diskizi rozlišovat, aby nedocházelo k omylům. Pole má celočíselné indexy a prochází se cyklem "for". Pro ostatní kolekce to neplatí. U seznamu nás indexy nezajímají, u slovníku to jsou klíčem stringy, u množiny nás zajímají jen klíče. Prochází se cyklem "foreach", případně se zpracovávají trojicí map-filter-reduce.

Takže k parametrům přistupuji přes klíče. Je to jednoduché, robustní a svižné.

atarist

Re:Python - zbožňovaný lidmi?
« Odpověď #138 kdy: 17. 09. 2017, 18:16:39 »
S pojmenovanými parametry je v některých jazycích trochu potíž. V PHP jsem to nahradil předáváním hodnot přes array a dost se mi to osvědčilo. Metoda si snadno zkontroluje, zda má všechna potřebná data a provede požadovanou akci.

Array se v PHP předává hodnotou (líná kopie), objekt odkazem. I to je dobré brát v potaz.

Takže k parametrům přistupuješ přes indexy toho pole? tyjo...

v PHP se slovník nazývá pole.

Ah, ok, dik za pripomenuti, ze je to trosku jiny svet ;-)

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #139 kdy: 17. 09. 2017, 18:52:09 »
v PHP se slovník nazývá pole.

Ah, ok, dik za pripomenuti, ze je to trosku jiny svet ;-)

Proto se snažím držet sémantického označování, i když je to vše jen "array".

V Pythonu jsou na to samostatné syntaxe, tam to vypadá lépe.


DotNetGuy

Re:Python - zbožňovaný lidmi?
« Odpověď #140 kdy: 17. 09. 2017, 20:47:08 »
Kit: Ukaž nám nějaký tvoje zdrojáky, portfolio, nebo něco.

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #141 kdy: 17. 09. 2017, 20:58:45 »
Kit: Ukaž nám nějaký tvoje zdrojáky, portfolio, nebo něco.

Stejně bys tomu nerozuměl a jen bys kritizoval...

PetrM

Re:Python - zbožňovaný lidmi?
« Odpověď #142 kdy: 17. 09. 2017, 21:13:35 »
Takže k parametrům přistupuji přes klíče. Je to jednoduché, robustní a svižné.

Fakt? Jaká je režie? Jak to vychází v porovnání pro pět stringů proti tomu, když jinde víš, že hodnota je na [SP + 8]?

Jak to šlape, pokud máš v cyklu zavolat 100 000x funkci s čtyřma parametrama, když musíš při každým volání 4x najít příslušnou položku  slovníku, aktualizovat ji, zavolat funkci s odkazem na slovník, najít příslušnou položku slovníku, přečíst ji,...? Jaký je čas v porovnání s klasickýma parametrama funkce?

Jak moc ten slovník žere paměť s porovnáním klasických parametrů ve stacku? Přece jenom, klíče musíš někde uchovávat ... Když máš 50 vnořených funkcí při rekurzi, musí to být opravdu radost.

A jak zajistíš, že ve slovníku pod "teplota" neuložíš před voláním funkce omylem z nějaké proměnné tlak? Se statickým typováním při přehození  parametrů kompilátor mrkne na protoypy a použije polymorfismus, nebo tě pošle do háje.

Co se stane, když do slovníku pod ten klíč vložím string a funkce potřebuje reálný číslo? Co se stane, když tam vložím instanci třídy a ono to chce integer? Přece ve funkci nevíš, co jsi tam narval...

Kit: Ukaž nám nějaký tvoje zdrojáky, portfolio, nebo něco.

Stejně bys tomu nerozuměl a jen bys kritizoval...

Takže ty to kituješ jak sklenářský učedník?  :-\

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #143 kdy: 17. 09. 2017, 21:35:36 »
Takže k parametrům přistupuji přes klíče. Je to jednoduché, robustní a svižné.

Fakt? Jaká je režie? Jak to vychází v porovnání pro pět stringů proti tomu, když jinde víš, že hodnota je na [SP + 8]?

Jak to šlape, pokud máš v cyklu zavolat 100 000x funkci s čtyřma parametrama, když musíš při každým volání 4x najít příslušnou položku  slovníku, aktualizovat ji, zavolat funkci s odkazem na slovník, najít příslušnou položku slovníku, přečíst ji,...? Jaký je čas v porovnání s klasickýma parametrama funkce?

Jak moc ten slovník žere paměť s porovnáním klasických parametrů ve stacku? Přece jenom, klíče musíš někde uchovávat ... Když máš 50 vnořených funkcí při rekurzi, musí to být opravdu radost.

A jak zajistíš, že ve slovníku pod "teplota" neuložíš před voláním funkce omylem z nějaké proměnné tlak? Se statickým typováním při přehození  parametrů kompilátor mrkne na protoypy a použije polymorfismus, nebo tě pošle do háje.

Co se stane, když do slovníku pod ten klíč vložím string a funkce potřebuje reálný číslo? Co se stane, když tam vložím instanci třídy a ono to chce integer? Přece ve funkci nevíš, co jsi tam narval...

Kit: Ukaž nám nějaký tvoje zdrojáky, portfolio, nebo něco.

Stejně bys tomu nerozuměl a jen bys kritizoval...

Takže ty to kituješ jak sklenářský učedník?  :-\

Kit zde občas píše šílenosti, ale tohle je dobrá praktika. Mnohem lepší než poziční parametry, ve kterých se snadno dělají chyby a není na první pohled vidět, co který parametr znamená. Vytváření speciálního typu pro všechno by bylo zbytečně pracné.

Zabývat se mikrooptimalizacemi má smysl možná u funkce, kterou voláte 10000+-krát.

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #144 kdy: 17. 09. 2017, 21:38:36 »
Takže k parametrům přistupuji přes klíče. Je to jednoduché, robustní a svižné.

Fakt? Jaká je režie? Jak to vychází v porovnání pro pět stringů proti tomu, když jinde víš, že hodnota je na [SP + 8]?

Režie je v porovnání s ostatními běžně používanými technikami velmi nízká. Co s tím má společného [SP + 8]? V assembleru už nedělám.

Jak to šlape, pokud máš v cyklu zavolat 100 000x funkci s čtyřma parametrama, když musíš při každým volání 4x najít příslušnou položku  slovníku, aktualizovat ji, zavolat funkci s odkazem na slovník, najít příslušnou položku slovníku, přečíst ji,...? Jaký je čas v porovnání s klasickýma parametrama funkce?

Proč bych to proboha dělal? Takové věci se dělají možná v Céčku, ale v PHP by to bylo jen plýtvání výkonem.

Jak moc ten slovník žere paměť s porovnáním klasických parametrů ve stacku? Přece jenom, klíče musíš někde uchovávat ... Když máš 50 vnořených funkcí při rekurzi, musí to být opravdu radost.

Na matematické výpočty si PHP neberu. Ten slovník si nebere žádnou paměť navíc, na vrcholu zásobníku je pouze přidán další odkaz. Ke kopírování dochází teprve ve chvíli, kdy se ten slovník snažíš modifikovat. Je snad jasné že by to byl hloupý postup a plýtval bys přitom nejen pamětí, ale i výkonem.

A jak zajistíš, že ve slovníku pod "teplota" neuložíš před voláním funkce omylem z nějaké proměnné tlak? Se statickým typováním při přehození  parametrů kompilátor mrkne na protoypy a použije polymorfismus, nebo tě pošle do háje.

Jednoduše:
Kód: [Vybrat]
$stav = array('teplota' => 36.7, 'tlak' => '120/60');
$pacient->update($stav);

V reálu to vypadá ještě jednodušeji:
Kód: [Vybrat]
$pacient->update($_POST);
Jak si metoda update() může splést takto zadané údaje?

Co se stane, když do slovníku pod ten klíč vložím string a funkce potřebuje reálný číslo? Co se stane, když tam vložím instanci třídy a ono to chce integer? Přece ve funkci nevíš, co jsi tam narval...

Tohle si přece ta metoda zkontroluje sama při validaci. Pokud se jí něco nelíbí, tak vyhodí výjimku.

Prosím, abys toto vlákno, které je o Pythonu, nezatěžoval dodazy na PHP.

Re:Python - zbožňovaný lidmi?
« Odpověď #145 kdy: 17. 09. 2017, 21:48:44 »
Prehlidka code smellu, co se prezentuje jako chvalyhodna technika.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #146 kdy: 17. 09. 2017, 22:04:11 »
Prehlidka code smellu, co se prezentuje jako chvalyhodna technika.

moderní PHP neznám. V JS je tohle best practice. Říká se tomu option object.

http://www.codereadability.com/what-are-javascript-options-objects/

mikrom

Re:Python - zbožňovaný lidmi?
« Odpověď #147 kdy: 17. 09. 2017, 22:18:10 »
...
https://docs.microsoft.com/en-us/dotnet/core/index
To nemeni nic na tom ze Python je multiplatformnejsi ako .NET.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Python - zbožňovaný lidmi?
« Odpověď #148 kdy: 17. 09. 2017, 22:22:08 »
V JS je tohle best practice. Říká se tomu option object.

http://www.codereadability.com/what-are-javascript-options-objects/

Mě se to vůbec neosvědčilo.

Snadno dochází k překlepům názvu klíče. Když mám hodně argumentů, a nejde to udělat jinak, použiju spešl objekt, který mi alespoň trochu validuje vstupní hodnoty. Ale bavíme se o případě, kdy potřebuju něco jako konfiguraci. Na normální volání funkce s několika málo argumenty mi přijde čitelnější prostě tam předat správně pojmenovaný výraz.

Jako v Pythonu jsou ty pojmenované parametry šikovná věc. Ale alespoň ti to hlídá platné argumenty. Bez toho je to tak nějak naprd.

moud

Re:Python - zbožňovaný lidmi?
« Odpověď #149 kdy: 17. 09. 2017, 22:23:57 »
Prehlidka code smellu, co se prezentuje jako chvalyhodna technika.

moderní PHP neznám. V JS je tohle best practice. Říká se tomu option object.

http://www.codereadability.com/what-are-javascript-options-objects/

To asi jo, ale co napriklad to predavani tlaku (tedy dvou hodnot se znamym rozsahem) ve forme retezce? A zrovna ve vlaknu, ktere se tyka datovych typu :)