Python - dobré rady a praktiky

Raskal

Re:Python - dobré rady a praktiky
« Odpověď #45 kdy: 24. 03. 2016, 20:09:11 »
V Pythonu lze za behu zmenit treba tridu a to bez neprijemnych dusledku, coz v Jave neni mozne (nejlepe je na tom asi dcevm).

Co s tím všichni máte? K čemu by to asi tak bylo, že od 10. minuty můj program funguje jinak? To se normálně dělá trochu jinak než dynamickou změnou třídy za chodu :D

Je to jedna z volnosti. Ja osobne to (vyjimence) pouzivam pro patchovani funkcionality. Pokud pro me je nejaka knihovna nevyhovujici, tak misto abych ji menil, tak ji upravim (patchuju) az za behu. Urychluje to vyvoj a opravovani chyb a usnadnuje pochopeni problemu. Dulezite je, ze to zabranuje nezvysovani naroku na vyvoj a vyzname to omezuje vytvareni blokujicich problemu pro vyvoji.


takynechápe

Re:Python - dobré rady a praktiky
« Odpověď #46 kdy: 24. 03. 2016, 20:38:33 »
Takže třeba po měsíci běhu uděláš patch na běžící aplikaci a přijde ti to jako super nápad? A nebo ji jen změníš před startem aplikace jako v každém normální jazyce?

Radek Miček

Re:Python - dobré rady a praktiky
« Odpověď #47 kdy: 24. 03. 2016, 21:19:30 »
V c++/Jave/etc... si mužeš otevřít inspektora a prohrabat se objekty v běžícím systému + modifikovat ho? Ne, není to živá platforma.

Na JVM to jde (tedy i v Javě to jde) - viz Java Virtual Machine Tools Interface. Inspekci umí každý debugger a modifikace umí třeba JRebel.

čumil

Re:Python - dobré rady a praktiky
« Odpověď #48 kdy: 24. 03. 2016, 21:24:32 »
Právě nevím, co přesně chceš, ale pro normální použití by ti pro Javu měl stačit JRebel, který ti za chodu mění chování. Dá se to udělat i jinak, ale tohle je docela fajn řešení.
No, já to nechci ...
JRebel není přesně to co sem myslel ... Budu se opakovat. Skus smalltalk. A nebo JS v browseru, to ti dá podobnej feel.

Jak sem řek nazačátku, dynamický typování může být úžasný, a taky úžasně strašný...a proto ho moc nemiluju.

Ačkoli, už sem si přespříliš zvykl na tu flexibilitu ... Trošku schizma

Re:Python - dobré rady a praktiky
« Odpověď #49 kdy: 24. 03. 2016, 21:35:32 »
Já bych chtěl vysvětlení té beztypovosti (různé zdroje se v této interpretaci liší); a kdyby to rozsekl Radek Miček bylo by to fajn .)
Co na tom chceš rozsekávat? Pythonovský objekt je v principu jenom slovník (podobně jako v Javascriptu nebo Lua) s tím, že některé klíče mají speciální význam. Konkrétně třeba nás tady může zajímat atribut __dict__. A to je vše. Na tom je to celé postavené. Můžu si vytvořit prázdný objekt (bez metod) a pak si do něj přidat metody jaké budu chtít. Jaký by to potom měl být typ? Žádný, v takovém prostředí pojem typ de facto neexistuje. Smysluplně se dá mluvit jenom o tom, jestli daný objekt splňuje nebo nesplňuje nějaký protokol/rozhraní (tj. disponuje v dané chvíli nějakou množinou metod). Ale pokud bych to chtěl opravdu korektně checkovat, musím to dělat za běhu.

Samozřejmě si můžu vymyslet, že nějaké další atributy budou mít nějaký další speciální význam. Například do nějakého atributu uložím referenci na něco, čemu začnu říkat "třída" a od té doby už z toho slovníku mám s trochou bižuterie "instanci" :)

Ironií osudu je takhle postavené OOP bližší té původní myšlence (SmallTalk) než C++ nebo java :)

Úplně stejně, jako v ostatních jazycích, když metoda požaduje jako vstupní parametr třeba číslo měsíce (1..12) a někdo do ní chce narvat třeba 42. Má na to třeba Java datový typ? Nemá. Použiješ int a ošetříš si to vlastním kódem.

V Pythonu se to dá ošetřit pomocí dekorátoru.
Přesně tak. A ani nemusíme jít tak daleko, stačí nám obyčejný null ;) Jestli se někdo ptá, jak to hergot pythonisti dělají, aby jim to nepadalo na to, že někam místo stringu dají int, tak odpověď je "dělají to v principu podobně jako javisti zabezpečují, aby jim to nepadalo na NullPointerException" :)



Jinak ale mimo flame k tématu: ví někdo, jak použitelné to typování v Pythonu 3 je? Např. kolik kódu std. knihovny je pokryto typy? Jak kvalitní jsou nástroje pro statickou analýzu?

V Erlangu taky typy de facto nejsou, ale dá se použít buť velice silné "manuální typování" (místo čísla dám dvojici {number_of_seconds_since_mireks_birth, 2453461}) nebo typové anotace + docela kvalitní statická analýza (dialyzer). Plus má teda Erlang oproti Pythonu výhodu v tom, že má excelentní podporu pro práci s chybovými stavy. To Python jenom těžko může dohnat, ale tu statickou analýzu by mohl mít snad poměrně dobrou...


Re:Python - dobré rady a praktiky
« Odpověď #50 kdy: 24. 03. 2016, 21:38:05 »
Jak sem řek nazačátku, dynamický typování může být úžasný, a taky úžasně strašný...a proto ho moc nemiluju.
Moje osobní pozorování, možná chybný: mám pocit, že pythoneři nemají moc tendence dělat velký kejkle. Oproti tomu v Ruby mi přijde že to bývá zvykem daleko častěji. Proto Ruby moc nemusím.

Re:Python - dobré rady a praktiky
« Odpověď #51 kdy: 24. 03. 2016, 22:59:20 »
Pythonovský objekt je v principu jenom slovník (podobně jako v Javascriptu nebo Lua) s tím, že některé klíče mají speciální význam.
To asi všichni víme...

 ... našel jsem na to různé názory; proto se ptám.

I am an academic computer scientist specializing in programming languages, and yes, the word "untyped" is frequently (mis)-used in this way. It would be nice to reserve the word for use with languages that don't carry dynamic type tags, such as Forth and assembly code, but these languages are rarely used and even more rarely studied, and it's a lot easier to say "untyped" than "dynamically typed".

http://stackoverflow.com/a/9155610/2490538

Re:Python - dobré rady a praktiky
« Odpověď #52 kdy: 25. 03. 2016, 00:20:41 »
To asi všichni víme...
No když to víš, tak si ujasni, na co se vlastně ptáš. Na definice pojmů "beztypový" a "dynamicky typovaný"? Nebo na co vlastně?

Re:Python - dobré rady a praktiky
« Odpověď #53 kdy: 25. 03. 2016, 11:02:55 »
Citace

No když to víš, tak si ujasni, na co se vlastně ptáš. Na definice pojmů "beztypový" a "dynamicky typovaný"?
Ptám se, jestli je správné označit jazyk jako JS nebo Python za beztypové; Protože proměnné sice nemají typ, ale hodnoty ano. Python si hlídá jestli je např. možné sečíst dvě hodnoty (jinak TypeError). Stačí si pročítat odpovědi a komentáře... jak jdou proti sobě... http://stackoverflow.com/questions/964910/is-javascript-an-untyped-language; Ale tvůj názor už znám; Dík.

Re:Python - dobré rady a praktiky
« Odpověď #54 kdy: 25. 03. 2016, 11:15:43 »
Stačí si pročítat odpovědi a komentáře... jak jdou proti sobě... http://stackoverflow.com/questions/964910/is-javascript-an-untyped-language;
No a hned v první odpovědi máš řešení: So the problem is that there's a few different definitions of untyped.

Ale tvůj názor už znám; Dík.
Nejde o názor. Prostě ta otázka nedává smysl. Někdo používá pojem "beztypový" v širším a někdo v užším smyslu. Je to asi tak jako by ses ptal, jestli je "správné" Ford Puma označovat jako "sportovní auto". Někdo to dělat bude, někdo ne.

čumil

Re:Python - dobré rady a praktiky
« Odpověď #55 kdy: 25. 03. 2016, 11:19:44 »
Citace

No když to víš, tak si ujasni, na co se vlastně ptáš. Na definice pojmů "beztypový" a "dynamicky typovaný"?
Ptám se, jestli je správné označit jazyk jako JS nebo Python za beztypové; Protože proměnné sice nemají typ, ale hodnoty ano. Python si hlídá jestli je např. možné sečíst dvě hodnoty (jinak TypeError). Stačí si pročítat odpovědi a komentáře... jak jdou proti sobě... http://stackoverflow.com/questions/964910/is-javascript-an-untyped-language; Ale tvůj názor už znám; Dík.
v JS máš pár primitivních typů a typ objekt. A ten může být beztypový a nebo typovaný (svým konstruktorem). Nic ti nebrání udělat blank objekt ({}) a pak do něj nafrkat co chceš. Nebo si můžeš udělat konstruktor a pak checkovat objekt pomocí (obj instanceof Constructor).

Jak řekl guru Mirek, ten systém prototypů je jen přidělení určitého smyslu některým fieldům (Function.prototype a obj.__proto__). Nic víc a nic míň.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Python - dobré rady a praktiky
« Odpověď #56 kdy: 25. 03. 2016, 13:11:08 »
Protože proměnné sice nemají typ, ale hodnoty ano. Python si hlídá jestli je např. možné sečíst dvě hodnoty (jinak TypeError).
Může být důležité, že si to nehlídá Python, ale ta funkce pro sečtení. Takže veškeré to typování v Pythonu spočívá v tom, že hodnota má jakýsi atribut, do kterého můžeš uložit symbol IntType. A nebo Foo. Víc toho pro tebe Python neudělá.

další

Re:Python - dobré rady a praktiky
« Odpověď #57 kdy: 26. 03. 2016, 12:36:09 »
Takže Python spíše nedoporučujete na větší projekt, protože se to nedá? Slyšel jsem, že ho lidi mají rádi, ale asi nikdo z nich moc velké věci nedělá, tak nevím. Hodně adminů, které znám, tak si Python pochvalují, ale tam to chápu. Na malé věci je velmi zajímavý a asi i bližší administraci.

Ivan Nový

Re:Python - dobré rady a praktiky
« Odpověď #58 kdy: 26. 03. 2016, 12:58:07 »
Takže Python spíše nedoporučujete na větší projekt, protože se to nedá? Slyšel jsem, že ho lidi mají rádi, ale asi nikdo z nich moc velké věci nedělá, tak nevím. Hodně adminů, které znám, tak si Python pochvalují, ale tam to chápu. Na malé věci je velmi zajímavý a asi i bližší administraci.
Je CRM systém a řízení výroby větší projekt? Viz Odoo.

Viky

Re:Python - dobré rady a praktiky
« Odpověď #59 kdy: 26. 03. 2016, 13:48:07 »
Takže Python spíše nedoporučujete na větší projekt, protože se to nedá? Slyšel jsem, že ho lidi mají rádi, ale asi nikdo z nich moc velké věci nedělá, tak nevím. Hodně adminů, které znám, tak si Python pochvalují, ale tam to chápu. Na malé věci je velmi zajímavý a asi i bližší administraci.

Záleží jaký projekt. To se nedá takto napsat. Je to projev diletanství a nezkušenosti pokud ti někdo jen tak napíše, že to nejde. Nedoporučuji ti moc se řídit radami tady těch místních brouků pytlíků. Většina z nich nemá žádné znalosti ani zkušenosti a jen tu na sebe dělají ramena. Akorát si někde něco přečetli a jen to tu papouškují, ani sami nevědí proč, nebo něco nepochopili, tak na to nadávají.
Např. my máme v Pythonu udělaný docela rozsáhlý (a stále rostoucí) testovací framework a pracuje se s tím velice příjemně. Původně to vznikalo ve Visual Basicu, což byl porod. Takže to už zachováváme jen kvůli starším projektům a nové děláme na Pythonu. Čili navzdory rádoby akademickým kecům místních "géniů" to jde.