Python - zbožňovaný lidmi?

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #270 kdy: 13. 12. 2017, 14:20:30 »
Dovolím si tvrdit, že kolega myslel ne že v technice "neexistují", ale že v technice nemají co dělat, protože to je k ničemu. ;)
Proč by to bylo k ničemu? Zvlášť momentálně není v IT moc problém dělat s nástrojem který mi vyhovuje a netýrat se jazykem co mi nesedne. Jasně, pokud mi nevadí že mě práce nebaví, můžu se znova doučit Javu nebo PHP, rozšířit si o něco možnost výběru zaměstnání a nejspíš v nich nebudu o moc méně produktivní… Ale proč to dělat, když mě baví jiné věci?

vyhovuje vám to, protože to znáte, je to vhodné pro váš projekt, pro váš způsob práce. Neměla byste problém přeučit se na něco jiného.


gll

Re:Python - zbožňovaný lidmi?
« Odpověď #271 kdy: 13. 12. 2017, 14:31:33 »
diskuze začala kvůli příspěvku

Takový zápis je pro mě noční můra, žádný začátek, žádný konec, žadné ohraničení for, prostě nic. Proč to tedy rovnou nepsat v jednom řádku?

Kód: [Vybrat]
for list in list_of_lists:
    for x in list:
        print x

,který dost přehání. Tak možná vyvolal přehnané reakce.

Petr

Re:Python - zbožňovaný lidmi?
« Odpověď #272 kdy: 13. 12. 2017, 14:31:40 »
Můj názor:
- Odsazování (bez závorek) rozhodně zvyšuje čitelnost. To je jedna z věcí, která se mi na něm opravdu moc líbí.
- Python je debilní, a na větší projekty bych se mu vyhnul, protože nemá typy a má GIL.

+1

Plus nemožnost refactoringu z toho dělá jazyk maximálně na skriptíky.
Každý jazyk umožňuje refactoring. Jediné co ho omezuje, jsou rom paměti a neznalost programátora.

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #273 kdy: 13. 12. 2017, 14:57:36 »
Můj názor:
- Odsazování (bez závorek) rozhodně zvyšuje čitelnost. To je jedna z věcí, která se mi na něm opravdu moc líbí.
- Python je debilní, a na větší projekty bych se mu vyhnul, protože nemá typy a má GIL.

+1

Plus nemožnost refactoringu z toho dělá jazyk maximálně na skriptíky.

Odkud pořád tihle tydýti s tímhle nesmyslem vylízají? Vyvrátí se jim to v diskuzi a oni po čase přijdou s touhle kravinou znovu. Kdyby si aspoň tu diskuzi přečetli pořádně a nedělali ze sebe hlupáky! :o

Tyhle "kraviny" a "nesmysly" řeším už pár let pořád dokola, když dělám na svých domácích projektech. Zrovna včera jsem vytahoval třídu do samostatného souboru. Konkrétně třídu Handler z tohoto zdrojáku (https://github.com/mopidy/mopidy/blob/develop/mopidy/audio/actor.py#L177 - předělávám to pro své účely ) To, co je v javě u vnitřní třídy práce na pár sekund (F6 Move v idee), jsem v Pycharmu dělal možná půl hodiny. Společné struktury mezi třídami jsem musel vytáhnout úplně jinam, jinak se cyklické importy nedaly vyřešit.

Samozřejmě doplňuji všude typehinty - opět po spuštění cyklické importy. OK, dám  do podmínky if TYPE_CHECKING - ejhle interpretu se nelíbí dvojtečkové typehinty - nezná import, který je jen pro IDE. Proč mu to chybí netuším, když s nimi stejně nepracuje. Takže pěkně názvy tříd do apostrofů, aby to IDE pochopilo a interpret neřval, stringy v typehintech neřeší. Super práce pokus/omyl.

Původní proměnné byly protected (audio._playbin) a protože byl Handler v jednom souboru s Audio, nijak mu to nevadilo. Po vytažení už na ně samozřejmě nevidí - další runtime chyba. Opět v javě nehrozí, IDE to rovnou zkontroluje a nedovolí takový refaktoring, příp. rovnou změní viditelnost na public. Nevadí, přejmenuji z _playbin na playbin. Ale chyba - kde proměnná audio nemá uvedený typehint na Audio, tam nepřejmenuje. Takže v původním souboru je audio.playbin, ve druhém zůstává audio._playbin. Dozvím se po spuštění. Kdybych však měl typehint včas, věděl by, že proměnná audio v Handleru je třídy Audio, jejíž field _playbin zrovna přejmenovávám, a přejmenoval by mi i ty v Handleru. Jenže jsem bohužel zvolil opačný postup...

Ještě mohu při přejmenování zaškrtnout i "search in comments and strings". Pak by to přejmenoval OK, ovšem úplně všude, což je samozřejmě zcela špatně. Obzvláště při dodržování zde tolik propagovaných krátkých stručných názvů je to chuťovka - třeba přejmenovat close jedné třídy na closeFile zmrví celý echt pythonní zdroják dle PEPxxx s úspornými názvy. To je přesně důvod, proč v pythonu jednoslovné metody (tedy jedno sloveso) nepoužívám takřka vůbec, vše se snažím mít jedinečné, aby to šlo dohledat a nemotaly se tam nijak nesouvisející výskyty stejného slova.

Když důsledně všude používám typehinty, IDE dává přejmenování a přesuny jakžtakž spolehlivě a nemusím po každé změně půl hodiny opravovat nesmysly. Bohužel jsem nepřišel třeba na to, jak například typehintem přetypovat stávající proměnnou jinak, než

Kód: [Vybrat]
def method(param: Message)-> None:
  if isinstance(param, SpecialMessage):
    param = param # type: SpecialMessage
    param.metoda_definovana_ve_special_message()

Konkrétní ukázku mám třeba https://github.com/pavhofman/aio/blob/master/sources/treesource.py#L41 . Ví někdo, jak to udělat jednodušeji? Moc rád se poučím.

Metody v API knihoven bez typehintů začínají kontrolou datových typů, např. https://github.com/dddomodossola/remi/blob/master/remi/gui.py#L465 nebo dokonce https://github.com/dddomodossola/remi/blob/master/remi/gui.py#L1497 . To je přece peklo...

Typehinty jsou v pythonu teprve v posledních verzích, sláva bohu za to. Bohužel bude ještě chvíli trvat, než je IDE začnou pořádně používat. Třeba Generic + TypeVar - pro přehlednost samozřejmě používám, ale typehint se ani v nejnovějším PyCharmu stejně nechytá, konkrétní hodnotu to stejně nepozná (např. https://github.com/pavhofman/aio/blob/master/sources/treesource.py#L22 vs. jeho vzdálený potomek https://github.com/pavhofman/aio/blob/master/sources/filesource.py#L23 či https://github.com/pavhofman/aio/blob/master/sources/cdsource.py#L26 ).

Tohle není příjemné programování, na jaké jsem zvyklý z javy. Na psaní skriptu je to rychlé, ale zpětně docela lituji, že jsem do pythonu šel. Přepisovat už se mi to nechce, tak skřípu zuby a doufám, že při stávajícím tempu vývoje bude za pár let o kus dál a budu si moci užívat pohody generátorů, práce se slovníky, mixinů, knihoven na úplně vše, tedy toho, co mě na pythonu baví.

ByCzech

  • *****
  • 1 874
    • Zobrazit profil
    • E-mail
Re:Python - zbožňovaný lidmi?
« Odpověď #274 kdy: 13. 12. 2017, 15:00:56 »
To, co je v javě u vnitřní třídy práce na pár sekund (F6 Move v idee), jsem v Pycharmu dělal možná půl hodiny. Společné struktury mezi třídami jsem musel vytáhnout úplně jinam, jinak se cyklické importy nedaly vyřešit.

Takže to shrnu, podle vás:

1. Idea refaktoring umí → Java je skvělá

2. Pycharm refactoring neumí → Python je špatný

...

No to jsou ale příšerné a hloupé závěry, sorry jako :D


dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #275 kdy: 13. 12. 2017, 15:20:47 »
No to jsou ale příšerné a hloupé závěry, sorry jako :D

Plácáš nesmysly. Mě zajímá, jak snadno se mi v tom vyvíjí. Změny se budou dělat pořád a pokud nemám nástroj, jak je dělat bezpečně, je to pro mě špatně. A pro python díky zavádění typů (typehintů) až v posledních verzích takový nástroj není, protože jej jednoduše nebylo možné vytvořit. PyCharm se snaží, to je vidět, a stejně je mu to houby platné.

Idea umí refaktoring, protože jí java díky uvedeným typům umožňuje vytvořit si vnitřní strukturu projektu a s tím pak pracuje. Pycharm to dělá všechno odhadem, víc mu python nedává.

Očividně to autoři pythonu pochopili a postupně na tom dělají. Zatím to pro velké projekty opravdu není příjemné používat. Takže souhlasím s předřečníky.

ByCzech

  • *****
  • 1 874
    • Zobrazit profil
    • E-mail
Re:Python - zbožňovaný lidmi?
« Odpověď #276 kdy: 13. 12. 2017, 15:30:32 »
No to jsou ale příšerné a hloupé závěry, sorry jako :D

Plácáš nesmysly.

Jasně... Doporučuji změnit IDE, když zvolíte správně, nejspíše změníte i váš názor, protože u vás nevidím výtky na Python, ale na IDE, které přenášíte na jazyk.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #277 kdy: 13. 12. 2017, 15:35:55 »
.......

jak by to podle vás mělo fungovat?

IDE má vyčíst typ z toho testu

Kód: [Vybrat]
elif msg.typeID == MsgID.REQ_PARENT_NODE:
?

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #278 kdy: 13. 12. 2017, 15:42:23 »
zkoušel jste testovat přímo typ? to by mělo fungovat.

https://www.jetbrains.com/help/pycharm/type-hinting-in-pycharm.html

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #279 kdy: 13. 12. 2017, 15:44:43 »
něco jako

Kód: [Vybrat]
elif isinstance(msg, IntegerMsg):
       self._sendParentNodeInfo(msg.value)

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #280 kdy: 13. 12. 2017, 16:07:45 »
pro přetypování existuje funkce cast. Mypy jí rozumí, nevím jak PyCharm.

Kód: [Vybrat]
from typing import cast, Any
y = cast(Any, x)

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #281 kdy: 13. 12. 2017, 16:28:30 »
Samozřejmě doplňuji všude typehinty - opět po spuštění cyklické importy. OK, dám  do podmínky if TYPE_CHECKING - ejhle interpretu se nelíbí dvojtečkové typehinty - nezná import, který je jen pro IDE. Proč mu to chybí netuším, když s nimi stejně nepracuje. Takže pěkně názvy tříd do apostrofů, aby to IDE pochopilo a interpret neřval, stringy v typehintech neřeší. Super práce pokus/omyl.

ty cyklické importy jsou úplně zbytečné. Tvrdohlavě dáváte každou třídu do vlastního souboru jako v Javě i když vám to komplikuje život.

ByCzech

  • *****
  • 1 874
    • Zobrazit profil
    • E-mail
Re:Python - zbožňovaný lidmi?
« Odpověď #282 kdy: 13. 12. 2017, 17:01:14 »
@gll:

Co kdybychom šli programovat v Javě a aplikovali bychom tam zvyky z Pythonu a pak se děsně čílili jak je ta Java pitomá? :D

armabeton

Re:Python - zbožňovaný lidmi?
« Odpověď #283 kdy: 13. 12. 2017, 17:27:08 »
Osobně mám Python ráda, v poslední době jsem se zamilovala do Rustu a naopak nesnáším Javu.

OT: uz existuji zajimave pracovni pozice na Rust? Protoze na tak mlady jazyk to znamena, ze nepujde o korporatni sto let stary kod :)

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #284 kdy: 13. 12. 2017, 17:30:01 »
@gll:

Co kdybychom šli programovat v Javě a aplikovali bychom tam zvyky z Pythonu a pak se děsně čílili jak je ta Java pitomá? :D

On má problém s cyklickými importy, protože předkům předává typ potomka. To se nepoužívá ani v Javě. Nevím, kde na to přišel.