Python - dobré rady a praktiky

Re:python - dobre rady & praktiky
« Odpověď #15 kdy: 24. 03. 2016, 15:23:43 »
Můžeš mi vysvětlit, jak se dělají úravy u dynamicky typovaných jazyků?
No jo, tak už jsme doma. Stačilo jen napsat nechápu/nesedla mi filosofie dynamicky typovaných jazyků a její odlišnost od přístupu, na nějž jsem zvyklý.
Jsem taky jeden z těch, co tu filosofii dynamicky typovaných jazyků moc nechápou. Jakým způsobem se dá fungovat s tím, že vlastně nevím vůbec nic o tom, co mi volající předá. Mám pocit, že bych měl psát unit testy i na to, jestli se moje funkce rozumně popasují s tím že místo intu dostanu string.
Tohle resis spis na urovni integracnich testu.


uetoyo


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:python - dobre rady & praktiky
« Odpověď #17 kdy: 24. 03. 2016, 15:32:29 »
Můžeš mi vysvětlit, jak se dělají úravy u dynamicky typovaných jazyků?
No jo, tak už jsme doma. Stačilo jen napsat nechápu/nesedla mi filosofie dynamicky typovaných jazyků a její odlišnost od přístupu, na nějž jsem zvyklý.
Jsem taky jeden z těch, co tu filosofii dynamicky typovaných jazyků moc nechápou. Jakým způsobem se dá fungovat s tím, že vlastně nevím vůbec nic o tom, co mi volající předá. Mám pocit, že bych měl psát unit testy i na to, jestli se moje funkce rozumně popasují s tím že místo intu dostanu string.
Jak se v Pythonu řeší, když vím že potřebuju nějaký int a nic jiného na daném místě nechci?
K Pythonu se moc vyjadřovat nemůžu, ale v takovém Objective-C se typy používají při kompilaci, i když jazyk (runtime) je plně dynamický, čímž má člověk vlastně to nejlepší z obou světů (tím ale netvrdím, že dynamické jazyky jsou lepší, jen že zmíněný problém je řešitelný).

uetoyo

Re:python - dobre rady & praktiky
« Odpověď #18 kdy: 24. 03. 2016, 15:42:14 »
Citace
Jak se v Pythonu řeší, když vím že potřebuju nějaký int a nic jiného na daném místě nechci?

Prostě otestuješ jestli je to `int`, když už to takhle potřebuješ.

Lepší je se ale ptát co ten `int` představuje -- jak ho interpretuješ;  pak ti stačí, když ti podstrčím něco, co ti je schopné dát požadovanou celočíselnou hodnotu; ... a tak dál, a tak podobně -- *to bude zas nekonečný seriál dynamicky vs staticky typované jazyky*

takynechápe

Re:python - dobre rady & praktiky
« Odpověď #19 kdy: 24. 03. 2016, 16:01:40 »
Citace
Jak se v Pythonu řeší, když vím že potřebuju nějaký int a nic jiného na daném místě nechci?

Prostě otestuješ jestli je to `int`, když už to takhle potřebuješ.

Lepší je se ale ptát co ten `int` představuje -- jak ho interpretuješ;  pak ti stačí, když ti podstrčím něco, co ti je schopné dát požadovanou celočíselnou hodnotu; ... a tak dál, a tak podobně -- *to bude zas nekonečný seriál dynamicky vs staticky typované jazyky*

A smysl toho? To je trochu jak u debilů, ne? Normálně předávám rozhraní a nezajímá mě implementace. Ty děláš to stejné, jen nikdo neví, co ti kdo předá a musíš jak blázen dávat pozor, jestli to funguje. A pokud ne, tak se to bude určitě super ladit. Vidím tam tu flexibilitu, jen nevím, k čemu by mi byla u vývoje.


uetoyo

Re:python - dobre rady & praktiky
« Odpověď #20 kdy: 24. 03. 2016, 16:17:00 »
Citace
A smysl toho? To je trochu jak u debilů, ne? Normálně předávám rozhraní a nezajímá mě implementace. Ty děláš to stejné, jen nikdo neví, co ti kdo předá a musíš jak blázen dávat pozor, jestli to funguje. A pokud ne, tak se to bude určitě super ladit. Vidím tam tu flexibilitu, jen nevím, k čemu by mi byla u vývoje.

Do jisté míry máš pravdu. Jde se tedy ptát ... jestli je lepši explictní rozhraní nebo duck typing. Python samozřejmě umí zjistit jestli je typ instancí nějaké třídy ...ale...;  pokud se dostaněš na hranici, kdy ti to hází klacky pod nohy, je lepší se ho vzdát. Jen tak mimo řeč --- ten slovník máš z domova? :)

http://martinfowler.com/bliki/DynamicTyping.html

takynechápe

Re:Python - dobré rady a praktiky
« Odpověď #21 kdy: 24. 03. 2016, 16:27:27 »
Umí ho zjistit před stuštěním? Po spuštění mi to už moc nepomůže. Ale chápu, že lepší než nic. Jaký slovník? Já si budu do dokumentace dávat, co tam vlastně chci cca za typ, místo toho abych ho jen uvedl? To ti jako přijde normální? Neni to vůbec divný a děláš 5x něco, co jinde máš hned? Jen tak abych měl představu, protože znám pár "programátorů" z dynamických jazyků a problém je v tom, že programovat neumí, ale dynamické typování si strašně chválí. Mám podezření, že jejich logika je tak děravá, že jim to ani nepřijde, že dělají nesmysly.

takynechápe

Re:Python - dobré rady a praktiky
« Odpověď #22 kdy: 24. 03. 2016, 16:37:13 »
Ok, ale třeba jednoduchý příklad. Mám metodu nazvanou cool_funkce s parametrem. Typ nevíme, protože jsme cool jako ta medota. Volá se na něm ale metoda send. Jaké další metody ten argument má? Nevíme, protože jsme cool. Ale můžeme si vyhledat všech 100 tisíc volání té metody a třeba najdeme všech 150 typů, které se tam posílají. Aha... No, nevim, asi radši zavřu VIM (VIM je přece best IDE!) a půjdu radši ven.

Nebo mi něco uniká? Jako určitě, takže se to rád dozvím, jak na to ;)

Re:Python - dobré rady a praktiky
« Odpověď #23 kdy: 24. 03. 2016, 16:45:07 »
Umí ho zjistit před stuštěním? Po spuštění mi to už moc nepomůže. Ale chápu, že lepší než nic. Jaký slovník? Já si budu do dokumentace dávat, co tam vlastně chci cca za typ, místo toho abych ho jen uvedl? To ti jako přijde normální? Neni to vůbec divný a děláš 5x něco, co jinde máš hned? Jen tak abych měl představu, protože znám pár "programátorů" z dynamických jazyků a problém je v tom, že programovat neumí, ale dynamické typování si strašně chválí. Mám podezření, že jejich logika je tak děravá, že jim to ani nepřijde, že dělají nesmysly.

Já si dynamické typování až tak nechválím :)  Pokud jde o uvedení typu, Python má type hints ... https://docs.python.org/3/library/typing.html; existuje http://mypy-lang.org/, od kterého se to celé odpíchlo.

V Pythonu se podle mne dá dělat pokud: dodržuješ nějaký mustr -- jako má třeba Django; nebo děláš "průzkum terénu" např. datovou analýzu, kdy nevíš co na tebe všechno ještě vypadne ... (IPython notebook).

Jinak to jde hodně rychle do kopru; Já sám bych si rozmyslel dělat velký projekt v Pythonu, ale někomu to jde (Dropbox) :)

takynechápe

Re:Python - dobré rady a praktiky
« Odpověď #24 kdy: 24. 03. 2016, 16:48:34 »
Sám vidíš, že type hinting je tam od 3. Trojka v podstatě nikde není. Nebo už jo? Takže ty roky před tím to dělali jak?

Re:Python - dobré rady a praktiky
« Odpověď #25 kdy: 24. 03. 2016, 16:48:43 »
Ok, ale třeba jednoduchý příklad. Mám metodu nazvanou cool_funkce s parametrem. Typ nevíme, protože jsme cool jako ta medota. Volá se na něm ale metoda send. Jaké další metody ten argument má? Nevíme, protože jsme cool. Ale můžeme si vyhledat všech 100 tisíc volání té metody a třeba najdeme všech 150 typů, které se tam posílají. Aha... No, nevim, asi radši zavřu VIM (VIM je přece best IDE!) a půjdu radši ven.

Nebo mi něco uniká? Jako určitě, takže se to rád dozvím, jak na to ;)

Ten typ bude v nějakém modulu, bude mít nějaký název? Možná tě špatně chápu ... jinak znáš PyDev?
« Poslední změna: 24. 03. 2016, 16:53:41 od uetoyo »

Re:Python - dobré rady a praktiky
« Odpověď #26 kdy: 24. 03. 2016, 16:52:13 »
Sám vidíš, že type hinting je tam od 3. Trojka v podstatě nikde není. Nebo už jo? Takže ty roky před tím to dělali jak?

Promiň, já píšu jen ve verzi 3 a tady nemohu nic dodat;

takynechápe

Re:Python - dobré rady a praktiky
« Odpověď #27 kdy: 24. 03. 2016, 16:53:38 »
Asi v nějakém modulu bude a název také bude mít. Těch názvu bude mít dokonce 15, protože si tam můžu posílat cokoli. Pydev jsem moc nezkoumal, protože to nevypadalo úplně dobře a ještě je to na Eclipse, což je nejhorší prostředí pro Javu. Na Python jsem vždy používal Pycharm.

alex

Re:Python - dobré rady a praktiky
« Odpověď #28 kdy: 24. 03. 2016, 18:09:27 »
Umí ho zjistit před stuštěním? Po spuštění mi to už moc nepomůže. Ale chápu, že lepší než nic. Jaký slovník? Já si budu do dokumentace dávat, co tam vlastně chci cca za typ, místo toho abych ho jen uvedl? To ti jako přijde normální? Neni to vůbec divný a děláš 5x něco, co jinde máš hned? Jen tak abych měl představu, protože znám pár "programátorů" z dynamických jazyků a problém je v tom, že programovat neumí, ale dynamické typování si strašně chválí. Mám podezření, že jejich logika je tak děravá, že jim to ani nepřijde, že dělají nesmysly.

Já si dynamické typování až tak nechválím :)  Pokud jde o uvedení typu, Python má type hints ... https://docs.python.org/3/library/typing.html; existuje http://mypy-lang.org/, od kterého se to celé odpíchlo.

V Pythonu se podle mne dá dělat pokud: dodržuješ nějaký mustr -- jako má třeba Django; nebo děláš "průzkum terénu" např. datovou analýzu, kdy nevíš co na tebe všechno ještě vypadne ... (IPython notebook).

Jinak to jde hodně rychle do kopru; Já sám bych si rozmyslel dělat velký projekt v Pythonu, ale někomu to jde (Dropbox) :)
Proč byste něco zjišťoval,
try:
     {block}
except ValueError:
     {block}

a dynamický jazyk si konverze udělá sám, je-li parametrem objekt, stačí, když vyhoví požadavkům metody jeho rozhraní. To může být výhoda, potřebujete-li aplikaci rozšiřovat. Stačí ohlídat rozhraní, popřípadě změnu provedete v definici toho objektu, který do metody vkládáte na jednom místě. U staticky typovaného jazyka musíte typy měnit všude v deklaracích, chcete-li aplikaci rozšířit, v extrémním případě, nepoužíváte-li nějaký pattern, který v podstatě za cenu větší režie systému přidává "dynamické" vlastnosti do statického jazyka.

A pokud je metoda použita na tisících míst, máte špatně návrh aplikace. Máte-li v aplikaci 1000 různých typů dokumentů, tak například metodu tisk u adresy použijete jen dvakrát, protože například dodací_list dědí tuto metodu z dokumentu a pak dokument->tisk ten volá adresa_dodavatele->tisk a adresa_odesílatele->tisk a jen ty v celé aplikaci volají adresa->tisk. Tedy volání je v celé aplikaci pro 1000 různých typů dokumentů jen 2x. Maximálně 4x, protože na žádném dokumentu nejsou více jak 4 různé poštovní adresy. A to je cool ne?

takynechápe

Re:Python - dobré rady a praktiky
« Odpověď #29 kdy: 24. 03. 2016, 18:16:27 »
Stačí ohlídat rozhraní, popřípadě změnu provedete v definici toho objektu, který do metody vkládáte na jednom místě. U staticky typovaného jazyka musíte typy měnit všude v deklaracích, chcete-li aplikaci rozšířit,

A to je cool ne?

To se právě dělá automaticky pomocí IDE, že jo. Hlavně máš často u typů právě jen rozhraní, takže změníš to. Já vlastně zapomněl, že Python rozhraní nepotřebuje, tak všude dáš prostě nadtyp :D To asi ne, že jo.

No, nevím...