Re: [python] OT: překlad pojmů first-class o bject a stream object
Tovim first-class object je spíš objekt první třídy než prvotřídní objekt, protože snad existují v programování objekty první třídy? No, v tom spočívá ten dotaz ;) Ono se dá najít i spojení first-class objekt -- část z toho na českých webových stránkách, ale většinou na německých. V němčině se to dá pochopit. Angličtina je přece jen germánský jazyk. Ale v češtině to nevypadá dobře. Ten pojem jako abstrakce se používá (v programování). Ale jde o to, jaké se mu dá jméno. Význam možná vystihuje objekt se vším všudy, ale to je spíš do textu za sedmi horami a sedmi řekami runtime context problém nespočívá v uvedeném sousloví ale v termínu runtime; překládá se jako běh? li ano, pak nezbývá než běhová souvislost Problém je v tom, že pojem runtime context je použit ve standardní dokumentaci. A mluví se tam i o správci kontextu (context manager) a o context management protokolu a je tam knihovna contextlib... Takže problém je s tím runtime. také se zeptám: jak se překládá slovo caller ? Volající, volající kód, volající funkce... Na druhé straně je volaný, volaná funkce, volaná metoda. P.___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] first-class object
Tovim objekt první třídy, vagon první třídy, porod první třídy, pohřeb první třídy mi přijdou jako normální česká spojení; v obráceném gardu to může být o něčem jiném: vagon první třídy nemusí být nutně vagonem prvotřídním No, to je trochu filosofická a matematická záležitost. Třída vymezuje věci s podobnými vlastnostmi. V tomto smyslu by měl být podle vagón první třídy také vagónem prvotřídním (podle definice). Že se záměr neslučuje s realitou, to už je jiná věc. Pak taky může být paní učitelka první třídy, která je možná prvotřídní, možná učí v první třídě a možná obojí. Tím chci naznačit, že objekt první třídy může v textu zavést podobné zmatky, jako ona paní učitelka. Jakmile se tam vyskytnou dvě třídy a začne se mluvit o funkci (jako o first-class objektu) slovy tato funkce je objektem první třídy), pak si někteří mohou myslet, že se bude vztahovat k třídě A. Fakt je, že prvotřídní objekt může být chápán jako velmi kvalitně napsaný. ;) P.S. Víc hlav -- víc zelí.___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] OT: překlad syndication feeds
Ahoj fšeci, Tohle by ale někdo mohl vědět. syndication feeds ...ve smyslu RSS. Tady vůbec netuším, jestli se tomu nějak česky říká. Sdružené krmení nenavrhujte ani náhodou :) P. P.S. Pořád platí http://blog.nic.cz/2010/03/25/pomozte-nam-s-prekladem-knihy-dive-into-python-3/ ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] OT: překlad pojmů first-class o bject a stream object
Hynek Fabian Přikryl Petr (úterý 27 Duben 2010 09:41:46): ... first-class objekt ... Mě v takových případech pomáhá párkrát výraz prohnat slovníkem tam a zpátky, v tomto případě jsem skončil zhruba u „bezvadný“ nebo „úplný“ objekt. Není to možná přesné, ale vyjadřuje to princip - že ostatní objekty jsou nedokonalé. Problém je v tom, že to nemá vyjadřovat dokonalost či nedokonalost ostatních objektů. Jde o to, že je něco objektem, i když v jiných podmínkách (v jiných jazycích) to vlastnosti objektu mít nemusí. V tomto smyslu prvotřídní nebo úplný je divné. Opravdu nejvíc mi sedí plnohodnotný, ale je otázka, jestli je to vhodný název pro pojem (plnohodnotný objekt). Taky se k tomu můžu postavit tak, že by to nebylo vnucováno jako kodifikovaný pojem, ale prostě jako srozumitelné vyjádření -- opis významu. runtime context Problém je v tom, že pojem runtime context je použit ve standardní dokumentaci. A mluví se tam i o správci kontextu (context manager) a o context management protokolu a je tam knihovna contextlib... Takže problém je s tím runtime. „provozní kontext“? „operační kontext“? operační kontext se mi velmi líbí. Myslím, že vystihuje velmi přesně, co se tím myslí. Díky, díky, díky. Petr P.S. Já to věděl: Víc hlav, víc zelí. ;) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] OT: Preklad pojmu runtime context?
Visgean Skeloru Petr Messner běhové prostředí? To se mi zdá jako nejlepší varianta, ten kontext mi tam nezněl celou dobu. Jenže právě ten kontext je tam celkem bezproblémový. Týká se to funkčnosti context manager a i v dokumentaci k příkazu with se explicitně mluví o kontextu (bez přívlastků). Zatím nejvíc se mi líbí návrh Michala Vyskočila -- lokální kontext Díky a pokračujte ;) Petr P.S. Pro tyto účely funguje i stránka http://blog.nic.cz/2010/03/25/pomozte-nam-s-prekladem-knihy-dive-into-python-3/___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] OT: překlad pojmů first-class o bject a stream object
Zdravím všechny po slunečném víkendu, Aniž bych vás chtěl ovlivňovat, hledám překlad pojmů first-class object a stream object Význam je jasný. Jde o používaný nebo dobře znějící český překlad. Díky za spolupráci, Petr P.S. Funguje http://blog.nic.cz/2010/03/25/pomozte-nam-s-prekladem-knihy-dive-into-python-3/___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] OT: Preklad pojmu runtime context?
Ahoj všichni, Tak jsem tady zase ;) runtime context -- tento pojem se používá v souvislosti s pythonovským with. Kontext -- tady je překlad celkem bezproblémový. Co runtime? běhový kontext -- pojem běhový se používá, ale nevím, jak moc. Jak se na to díváte? Nemám na mysli pohled zarytých technických puristů, pro které je jakákoliv odchylka od originálních anglických textů nepřijatelná. Díky za názory, Petr (alias pepr) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Záměna funkce v instanci objektu
Czenek napsal Ano, mělo by to být dynamické. A vaše řešení se mi líbí. Jenom nechápu proč to nelze udělat tím prostým přiřazením? Co se tedy vlastně stane, když do metody nějakého objektu přiřadím novou funkci? Zkus tenhle kód (tedy hlavně poslední tři řádky): class tridaA: def b(self, x): self.x = x def c(self, x): self.x = x + 1 a = tridaA() print type(a.b) a.b = c print type(a.b) Vypíše to: type 'instancemethod' type 'function' To znamená, že nejdříve bylo a.b metodou instance, ale po přiřazení je to obyčejná funkce. a.b je jen jméno. Původně ukazuje na objekt metody. To znamená, že se taky jako metoda používá. Po přiřazení se jméno a.b použije pro jiné účely. Je pak spojeno s odkazem na obyčejnou funkci. Že se zrovna první parametr jmenuje self není vůbec podstatné. Dokonce i u metod je toto jméno jen konvencí. Něco jiného je, kdybys za běhu potřeboval přehazovat jen metody stejné třídy. Zkus tohle: class tridaA: def __init__(self): self.m = self.b def b(self, x): self.x = x def c(self, x): self.x = x + 1 a = tridaA() a.m(1) print a.x a.m = a.c a.m(3) print a.x Volá se pokaždé a.m, ale ta pokaždé dělá něco jiného. pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Zkrácená forma přiřazení sel že
Jirka Vejrazka nemam ted momentalne cas to zkouset, ale troufnul bych si odhadnout, ze pro funkcnost ve stylu (b) budes muset nadefinovat jak se ma chovat iterator, tj. napsat si vlastni metodu __iter__(self, ...) Je to tak. Jirka to trefil přesně. To násobné přiřazení vyžaduje, aby objekt podporoval průchod svými prvky. (Takový objekt se pak dá použít například i v cyklu for.) Zkus tohle: class Seznam(): def __init__(self,sez): self.data=sez def __getitem__(self,idx): return idx len(self.data) and self.data[idx] or None def __iter__(self): '''Vraci iterator -- sam sobe iteratorem.''' self.idx = 0 return self def next(self): '''Standardni podpora iterace.''' if self.idx = len(self.data): raise StopIteration hodnota = Seznam.__getitem__(self, self.idx) self.idx += 1 return hodnota ### VSTUP: ### slova = Seznam([ITEM-1,ITEM-2,ITEM-3,ITEM-4]) prvni = slova[0] druhy = slova[1] treti = slova[2] ctrty = slova[3] # Rucne provadena iterace. it = iter(slova) print it print next(it) print next(it) print next(it) print '-' * 50 # Automaticky aktivovana iterace. prvy, druhy, treti, ctvrty = slova print prvy print druhy print treti print ctvrty___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Preklad list comprehension?
Ahoj Jarku, Od: Jarek Krcmar Mohlo by se to přeložit jako Srozumitelnost seznamu? To není ono. Slovo comprehension sice má i význam pochopení nebo porozumění, ale taky má význam něco obsáhnout ve smyslu poskládat do sebe. Možná to volně souvisí ve smyslu pochopit = naskládat si něco do hlavy ;) Petr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] list comprehension -- prozatimni zaver
Když mi bylo asi 9 let, bruslil jsem po škole na čerstvě zamrzlém rybníku. V jednom místě byly nahromaděné řasy, takže tam led nebyl nejkvalitnější. Na kamarády jsem ještě stihnul vykřiknout Ku*va, tady to rupe!. A už to bylo. Tou dobou se totiž tata vracel z práce a zkracoval si to přes rybník. A jak mě slyšel, tak mi jednu majznul, že jsem sebou rupnul já. Od té doby jsem o tom začal víc přemýšlet. A děkuju tatovi, že jsem díky tomu na to přišel tak brzo ;) Petr Od: Petr Mach Přijato: 15.4.2010 19:51:51 Předmět: Re: [python] list comprehension -- prozatimni zaver Odvazat se clovek muze prece i bez vulgarity, ne? 2010/4/14 MICHÁLEK Jan Mgr. michalek@uhul.cz Když se odvázat, tak pořádně, co takhle seznamrdka From: python-boun...@py.cz [mailto:python-boun...@py.cz] On Behalf Of Petr Mach Sent: Sunday, April 11, 2010 9:26 AM To: Konference PyCZ Subject: Re: [python] list comprehension -- prozatimni zaver Přesně tak, teď to zní nezvykle a legračně, ale tak tomu bylo u řady slov, na které jsme si už zvykli a už nám nám to ani nepříjde. 2010/4/1 Přikryl Petr prik...@atlas.cz Petr Mach Trochu se odvažte, nazvěte to seznamátor a je to :-). No, dobrý nápad. A ty ostatní se budou jmenovat slovníkátor a množinátor. A nadpis bude -átory. Nebo zobecníme na dělátory? :))) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] OT: preklad sanity check -- rozhodnuti
Zdravím všechny, Díky za tipy na překlad sanity check. Ono to má trochu kultovní nádech a ti, co ten anglický pojem vymysleli možná měli na mysli příčetnost -- svoji. Ale faktem je, že tady se to vztahuje na testování správné funkčnosti programu. Mohli bychom uvažovat i o korektním chování programu. Ale v konkrétním případě se jedná skutečně o to, že předkládáme nepochybně korektní vstupy (bezesporné, jednoduché) a testujeme nejzákladnější funkčnost programu, funkčnost jádra řešení (bez specialit a hraničních případů). V tomto smyslu jsem zvažoval Davidovu kontrolu korektnosti a Petrův test správnosti. Přece jen je tam slovo check, které navádí spíš k překladu kontrola. Správností se zde myslí správnost chování. Takže jsem to ještě chvíli přemílal v hlavě a dospěl jsem k prozatímnímu závěru: kontrola funkčnosti Není to sice tak omračující jako sanity check, ale doufám, že to bez magie bude srozumitelnější. Pojem sanity check uvedu na příslušných místech v závorce (pokud to budu pokládat za vhodné). Ještě jednou díky (i těm co si z toho dělají prdel, protože ti, co už překládali, ví...). S pozdravem, pepr P.S. Víc hlav, ... víc zelí. Hynek Fabian http://www.merriam-webster.com/dictionary/sanity the quality or state of being sane; especially : soundness or health of mind No a ti co píšou o korektnosti by se měli mrknout do slovníku :-P Ne že by se dalo vždy všechno překládat doslova, ale tento případ se mi zdá přesný a výstižný. David Rohleder spíš kontrola korektnosti. Správný vstup je pak podmnožinou korektního vstupu. No a ti co píšou o příčetnosti by se měli mrknout do zrcadla :-) Petr Messner píše v Čt 08. 04. 2010 v 12:31 +0200: test správnosti ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] OT: preklad sanity check
(Off topic) Zdravím všechny pojídače velikonočních vajec ;) Má tady další Kolik třešní, tolik višní... Překládal jste někdo pojem sanity check? Nebo jste to někdy někde viděli přeložené? Mám nějaké nápady, ale nic moc (a nechci ovlivňovat). Jaké nápady máte vy? Předem upozorňuji, že to rozhodně nechci ponechat v anglickém tvaru, takže pokud navrhujete nepřekládat, chci vám tímto ušetřit práci a čas na reakci ;) Díky za nápady. Přeju hodně slunečního svitu, málo práce a dobrou náladu. pepr P.S. Pokud to nechcete zahnojovat příspěvky v tomto vzácném fóru, doporučuji konec stránky http://blog.nic.cz/2010/03/25/pomozte-nam-s-prekladem-knihy-dive-into-python-3/___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] list comprehension -- prozatimni zaver
RMiklos napsal list comprehension = notace na vytváření seznamu Jo. Jenže [1, 2, 3, 4] je taky notace na vytváření seznamu. A potřebuju dospět k samostatnému ekvivalentu pojmu comprehension. Hynek Fabian Přikryl Petr: list comprehension = generátorová notace seznamu set comprehension = generátorová notace množiny dictionary comprehension = generátorová notace slovníku Po technické stránce je to perfektní. Ale [...] vítězí krátké a stručné termíny nad popisnými, a dvanáct slabik je moc. Ano. Zatím jsem na nic stručnějšího při chtěné přesnosti vyjádření nepřišel. Vsadím jablečný koláč proti psímu sucharu, že „notace“ bude z praktického užití okamžitě vypuštěna. Je to slovo přesné a výstižné, ale nadbytečné. To mi nevadí. To je život. Já to tam potřebuju, tak to použiju a nechám na každém, jak moc se toho chce držet při rychlé osobní komunikaci, kdy se věci mohou vyjasňovat doplňujícími dotazy a poznámkami. Generátor seznamu je fajn. Ale bez kontextu to může být víc věcí. P.___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] OT: Hleda se slovensky spravce nastroje Doxygen
Zdravím všechny pythonisty, Už delší dobu se hledá správce pro podporu slovenského jazyka v nástroji Doxygen http://www.doxygen.org/ Měl by to být člověk, který aspoň trošku tuší, co je to C++, ale stačí trošku. Pomocná ruka se najde. Doxygen se používá pro generování dokumentace ze zdrojového textu v komentářích. Výhodný je zejména pro vytváření programátorské dokumentace, pro vyjádření vazeb (jaká funkce volá jakou...). Mimo jiné se dá použít i pro Python. Dřívější správce (Stanislav Kudláč) už má moc jiné práce (ale díky za to, co už udělal). Díky za nabídky, pepr___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Funkce vs. metody třídy (bylo RE : nevznik objektu)
Michal Vyskocil píše David Rohleder píše Petr Messner píše Možná jsem prostě jenom příliš staromódní [...] ... - nevolat konstruktor (tedy nevytvářet objekt), ale volat funkci, která sama vytvoří objekt, nebo vrátí None - podle mě nejlepší řešení ... To zní zajímavě, ale moc mně to nezapadá do takového toho objektového pohledu na svět. Nutno přiznat, že je to asi celkem jedno, z venku modulu to vypadá stejně jako přímo ten konstruktor objektu. ... No tak to nemusí být funkce, ale metoda třídy Je to sice trošku Javovský přístup, ale aspoň to nezačíná na class IPFactory :-) Já bych se přimlouval za to být trochu staromódní a nesnažit se všechno převrátit na objekt. Staré dobré funkce jsou zde tím nejjednodušším vyjádřením uvedeného záměru. Snažit se zabalit funkci do podoby něčeho vznešenějšího mi připadá zbytečné. Pokud třída neobsahuje žádnou členskou proměnnou a není určena k dědění, pak psát kód do podoby její metody třídy mi připadá ve srovnání s prostou funkcí obtížně zdůvodnitelné. KISS -- Keep It Small and Stupid Taková třída by mohla přinést navíc pouze svázání více souvisejících metod dohromady. Třída, ze které se nevytvářejí instance (protože není nutné zachycovat vnitřní stav) je degradací na pouhý prostor jmen, do kterého jsou umístěny prosté funkce. V Pythonu vyjádříme prostor jmen formou odděleného modulu -- když už to musí být. Podle mého názoru funkce a objektový pohled na věc spolu nijak nebojují. pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Preklad list comprehension?
tommz napsal pepr napsal Jak přeložit (krátce) pojem list comprehension. Kdysi dávno se to tady už řešilo a došli jsme společně k názoru generátor seznamu. ... až na to, že to není přesné. A co intezionální zápis seznamu, množiny, ... ? Jestli jsem tu konstrukci teda správně pochopil :) Jak by řekl klasik Neříkej mi tajtrlik. Za prvé nevím, co to je, a za druhé mě to uráží ;) Intenzionální logiku neznám a mám obavy jen tak plácnout. A taky předpokládám, že ji nezná drtivá většina uživatelů jazyka Python. Možná to vzbuzuje jasnou představu o účelu takového zápisu pro někoho, kdo se intenzionální logikou zabývá. Ale obávám se, že možná ani to ne. David navrhl : generovaný seznam : generovaný slovník : generovaná množina Tohle je srozumitelné, ale není to ono. Omlouvám se, ale potřebuju teď být detailista, protože na tom pojmu budu stavět víc věcí okolo. Jde o to, že ten pojem comprehension vyjadřuje použití určitého způsobu zápisu našeho záměru, který je zachycen ve zdrojovém textu. Má tedy statický charakter. Pojem generovaný seznam navozuje představu hotového objektu, který byl nějak vygenerován, ale jakoby se neříká jakým způsobem. Když dám dohromady ty dva návrhy, pak mi vychází zápis generovaného seznamu zápis generovaného slovníku zápis generované množiny ale to se pojmu moc nepodobá. Je to málo specifické generátorový zápis seznamu generátorový zápis slovníku generátorový zápis množiny Společný pojem by mohl být generátorový zápis (= comprehension). Hmmm. Nevím. Nebo jo? Funkční princip list comprehension je v tom, že generátorovým výrazem popíšeme vznik generátoru, který po dobu inicializace objektu generuje počáteční hodnoty. Tak trochu problém je už originální pojem comprehension má v Češtině tak jakoby nádech podstatného jména slovesného nebo nějak v sobě zachycuje činnost. To je u pojmů, které mají vyjadřovat něco statického, trochu nepraktické. Jak se díváte na to ... ? xyz comprehension = generátorový zápis XYZ Díky za názory, pepr___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Dive Into Python 3 - diskuse k pojmum na nic.cz (bylo Re: Preklad list comprehension?)
Vypadá to, že diskuse se přesune na http://blog.nic.cz/2010/03/25/pomozte-nam-s-prekladem-knihy-dive-into-python-3/ Mám pocit, že by to ale chtělo nějaké lepší komunikační médium -- něco ve stylu wiki... Nebo něco jiného. Nemáte zkušenosti? Taky by se tam asi hodilo zařadit seznam pojmů a slovních spojení, o kterých si myslíte, že jsou z hlediska překladu problematické. A postupně bychom to vyjasňovali. Hynek Fabian napsal Co máte všichni s těmi generátory? Je to „výčet seznamu“ (není to z mojí hlavy, ale už nevím kde jsem to poprvé zaslechl) Trochu hezčejší by byl „vypočítávaný seznam“, ale to už mi přijde dlouhé. S tím nemůžu souhlasit. Pojem výčet se používá celkem jednoznačně pro konkrétně vyjmenovanou sadu hodnot. Tady se ty hodnoty vytvářejí transformací z jiných hodnot něčím, co už má pojem přidělen, a to generátorovým výrazem. Výsledkem generátorového výrazu je generátor. Ten produkuje počáteční hodnoty výsledného seznamu. BTW tenhle job ti Petře nezávidím - buď tě jedna polovina lidí prokleje že zatahuješ do českého textu cizojazyčné termíny, nebo druhá půlka že vymýšlíš čechismy o které nikdo nestojí :-) Z toho strach nemám. Kdo velmi trvá na cizojazyčných termínech, přečte si to v originále (budu je taky na vhodných místech uvádět v závorce). Chci dosáhnout toho, aby se to dalo dobře číst a aby člověk-začátečník, případně i neprogramátor nenacházel v textu pro něj naprosto nesrozumitelné věci (v rozumné míře). Petr Majtan (čtvrtek 25 Březen 2010 10:36:14): napada mne toto: seznam vytvaren generatorem seznam s pomoci generatoru seznam inicializovany generatorem nebo jen seznam z generatoru ale je to fakt orisek... Kolik třešní, tolik višní ;)___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] list comprehension -- prozatimni zaver
Toto je velmi zajímavý příspěvek a na jeho základě jsem dospěl k závěru, který uvádím... no na závěr. Díky Jan Bednařík napsal (rozlámal jsem a doplnil číslování kvůli odkazům) 1) Rozhodně nepřekládat. Překlad nic neřekne začátečníkovi, ale ani nikomu, kdo má s programováním zkušenosti. list comprehension je obecný pojem používaný v mnoha programovacích jazycích. Pokud vím, tak neexistuje žádný všeobecně rozšířený překlad do češtiny. A osobně se nepamatuji, že bych se setkal s knihou/učebnicí/skripty, kde by to někdo překládal. 2) Význam pojmu list comprehension je natolik specifický, že při snaze ho přeložit se vždy dostaneme na velmi tenký led. 3) Použití všeobecně známých pojmů z programovacích jazyků jako generátor, konstruktor, atp. s sebou ponese matoucí asociace. 4) Například pod pojmem generátorový zápis si spousta lidí představí generator expression a těžko pochopí, že to má mít úplně jiný význam. 5) list comprehension je pojem používaný v informatice desítky let. To že ho ještě nikdo nějak rozumně nepřeložil do češtiny (tím myslím překlad který by se uchytil) asi o něčem vypovídá. Myslím si, že jakákoliv snaha tento pojem přeložit si vyžádá širší akademickou diskusi přesahující komunitu okolo jazyka Python. Zkusil bych se poptat odborníků na fakultách informatiky zdejších vysokých škol. Třeba někde vymysleli a používají nějaký rozumný překlad. = ad 1) Cílem té knihy mimo jiné je, aby to někomu něco řeklo. A ten překlad se dělá proto, aby to bylo k dispozici pro české čtenáře. Chápu, je to trochu paradox ;) Takže první závěr zní, rozhodně to nějak přeložím. Originální pojem samozřejmě ponechám v závorce a přidám asi odkaz na http://en.wikipedia.org/wiki/List_comprehension ad 2) Není to zase tak tenký led. Jedna věc je snažit se přeložit anglické slovo comprehension a druhá věc je snažit se najít odpovídající pojem, který vychází z významu toho anglického pojmu. Na výše uvedeném odkazu na wikipedii se dají najít tyto jasné stopy (list comprehension): - Je to SYNTAKTICKÁ KONSTRUKCE. Tím odpadají kandidáti typu generovaný seznam (protože to vyjadřuje spíš dynamický výsledek, než statický zápis v programu, tj. syntaktickou konstrukci. - Existuje i matematický pojem set comprehension, pro který existuje ekvivalent set-builder notation -- doslova notace (zápis) vytvářeče množin. Je to ono známé (příklad) { x elem N: x 0 } - Ty zmíněné jazyky jsou většinou deklarativní jazyky. Mají svým způsobem blíž ke klasické matematice, kde množina vznikne, obsah splňuje vlastnosti, je. Ale už ono set-builder napovídá tomu, že v praktickém případě se musí nějak vybudovat... ad 3) S tím částečně souhlasím. Proto se snažím o diskusi. Protože definice pojmů jsou vždy věcí dohody. Není v tom nic mechanického. Vstupuje do toho lidský faktor, protože je to nástroj pro lidi. ad 4) Tady si dovolím oponovat. Jestli jste to pochopil takto, tak mám radost, protože právě takhle to bylo myšleno. Ono to totiž nemá jiný význam. Na http://en.wikipedia.org/wiki/List_comprehension se říká, že jde o syntaktickou konstrukci pro vytvoření seznamu z jiného seznamu. V deklarativních jazycích je to OK. Ale Python je imperativní jazyk a tahle přejatá konstrukce je elegantně použita s širší platností. List comprehension totiž umožňuje vytvořit seznam z čehokoliv, přes co se dá iterovat (nejen ze seznamu). A ta iterace se dá popsat výrazem (tedy nejen příkazy) a tomu výrazu se říká generátorový výraz. Generátorový výraz je zvláštní v tom, že šikovně kombinuje deklarativní přístup s imperativním. Deklarativně se zapisuje a jeho možnosti se podobají generátorové funkci (která má uvnitř yield). Vyhodnocením generátorového výrazu nebo zavoláním generátorové funkce vznikne generátor (generátorový objekt). Postupným voláním .next() můžeme získat generované hodnoty. ad 5) [... akademickou diskusi.] Což tímto samozřejmě činíme. Čtou to i lidé, kteří se věnují výuce. Postupně přejdu k závěru... List comprehension je syntaktická konstrukce. Jejím účelem je popsat vytvoření seznamu jaksi víc deklarativně. Protože jde o syntaktickou konstrukci se specifickým významem, není pravděpodobně implementována překladem na obecný generátor, ale je to uděláno efektivněji. Přesto ale věcně můžeme List comprehension čistě nahradit použitím konstruktoru seznamu a do něj vloženého generátoru, který může být definován i generátorovým výrazem. Srovnejte: lst = [ i*2 for i in range(10) ] lst [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] a generátorovým výrazem lst = list(i*2 for i in range(10)) lst [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] Takže list comprehension je typický syntactic sugar, který může být díky tomu, že jde o speciální případ generátoru poněkud efektivněji implementován. A teď set comprehension neboli set-builder NOTATION: mn = { i*2 for i in range(10) } mn {0, 2, 4, 6, 8, 10,
Re: [python] Jak byste přeložili Dive Into Pyt hon?
Díky všem za náměty. Zvláště obálka knihy s tou chobotnicí by se mi líbila... (kdybych byl škodolibý perlovský nebo rubyovský fundamentalista ;) Zvolil jsem kompromisní řešení, ale nebude to záležet jen na mně. Abyste pak na první pohled věděli, o co jde (a nejen vy), bude se to asi jmenovat česko-anglicky: Dive Into Python 3 aneb Ponořme se do Python 3 Já vím, má to svoje mouchy. Ale na nic kompromisně nekompromisního jsem nepřišel. Na začátcích kapitol jsem Diving in přeložil jako Ponořme se. Ponořme se do hlubin -- to se mi zdá příliš básnické a málo otevřené dvojznačnostem. Ona se tak kniha noří nejen do hlubin. Spíš by to mělo vyznít jako výzva k soustředění, ke snaze pochopit... než směřování k detailům a temným hlubinám. Mějte se krásně, pepr - Od: MICHÁLEK Jan Mgr. Přijato: 17.3.2010 11:18:05 Předmět: Re: [python]Jak byste přeložili Dive Into Python? ponořme se do hlubin pythonu -Original Message- From: python-boun...@py.cz [mailto:python-boun...@py.cz] On Behalf Of Ctibor.Plasek Sent: Wednesday, March 17, 2010 11:10 AM To: Konference PyCZ Subject: Re: [python]Jak byste přeložili Dive Into Python? Divej Python :-) Původní zpráva Od: Hynek Fabian hynek.fab...@firma.seznam.cz Předmět: Re: [python] Jak byste přeložili Dive Into Python? Datum: 17.3.2010 10:53:24 Python do hloubky nebo Hlubiny Pythonu. Podkapitola by se pak klidne mohla jmenovat Potápíme se. A na obalku patri tohle :-) http://artfiles.art.com/5/p/LRG/17/1745/JNL3D00Z/huge-octopus-nearly-s ucceeds- in-overcoming-american-diver-martin-lund-but-is-eventually-beaten-off. jpg Přikryl Petr (úterý 16 Březen 2010 23:31:21): Po delší odmlce všechny zdravím. Přemýšlím nad tím, jak by se dal trefně přeložit název známé knihy Dive Into Python a úvodní podkapitola v jednotlivých kapitolách Diving In. Má někdo nějaký trefný nápad? ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python __ Informace od ESET NOD32 Antivirus, verze databaze 4950 (20100316) __ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz __ Informace od ESET NOD32 Antivirus, verze databaze 4950 (20100316) __ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Trida pro IP adresu, vyjimky (bylo RE: Re: nevznik objektu)
Zdravím, Přidám svůj pohled na řešení problému s IP objektem a na pohled na výjimky (s ohledem na vaše vzdělání a působení). S tím návrhem třídy IP bych se přimlouval k promyšlení pohledu na to, co objekt třídy IP reprezentuje. Zohlednil bych taky to, jak by to vypadalo v jiných jazycích, třeba v C++. Prakticky žádný jazyk neumožní korektní nevznik objektu -- pokud nedojde k nějaké nízkoúrovňové havárii. Objekt v kompilovaných jazycích buď vytvořím staticky, na zásobníku (jakoby staticky, ale v prostoru zásobníku) nebo dynamicky (new nebo něco takového). Jakmile vznikne, zpřístupňuji jej přímo přes jméno proměnné (statický objekt nebo na zásobníku -- tohle v Pythonu není), přes referenci (to je případ Pythonu) nebo přes ukazatel. Pouze v případě použití ukazatele mám možnost vrátit alternativně hodnotu NULL. Pak to musí být případ, který popisoval Petr Messner -- zavolat funkci a ta vrátí buď NULL nebo hodnotu ukazatele na vytvořený objekt. Tohle by v Pythonu bylo stejné. Při návrhu se musí rozhodnout, co vlastně objekt třídy IP má vyjadřovat. Má vyjadřovat zachycení přání vnějšího prostředí (uživatele, volajícího kódu) získat objekt s právě takovou IP adresou? Má existence objektu vyjadřovat platnost IP adresy? Co to vůbec je platná IP adresa? Je to syntakticky správně napsaná adresa, nebo je to adresa, která se dá skutečně použít? Nebo dokonce adresa, která mi umožní udělat operaci, kterou bych chtěl provést (tj. s ověřením, že se přes ni někam dostanu)? A co když se syntaxe IP adres v budoucnu změní? Jak to udělat, abych toho musel předělávat co nejméně? V tomto smyslu se přimlouvám za to, aby objetk třídy IP vznikl vždy, ale aby se bránil použití v případě, kdy má nepoužitelný obsah -- v okamžiku použití, nikoliv v okamžiku vzniku (viz například momentální nedostupnost přes IP). Na vyšší úrovni si pak můžu rozhodnout, zda objekt s nepoužitelnou IP adresou (po otestovnání jeho vlastností) ponechám nebo zruším. V tomto smyslu se přimlouvám znovu za návrh Petra Messnera -- využít __nozero__. Protože přesně pro tento účel byla metoda navržena. Ona se vlastně jmenuje blbě. Její jméno by mělo být odvozeno spíš z myšlenky hodnota v boolovském kontextu. Ale vznikla v době, kdy Python místo True a False používal ještě 0 a != 0 (jako C). Pak nepotřebuji pomocnou funkci, ale objekt můžu použít k testování přesně stejným způsobem, jako bylo původně zamýšleno: ipaddr = IP(192.168.34536.45) if not ipaddr: print zadavas blby vstup Chování v boolovském kontextu implementované metodou __nozero__ navíc umožňuje dynamicky měnit platnost objektu podle potřeby. Teď k výjimkám. Souhlasím s názorem, že výjimky by se měly vyskytovat výjimečně. Ale spíše jde o to, že se výjimečným způsobem ošetřují. Co se týká výjimky StopIteration, tu považuji spíš za výjimečnou ;) Jde o to, že samotný cyklus for je v Pythonu proti klasickým kompilovaným jazykům trochu výjimečný. Není to počítaný cyklus. Je to zobecněný cyklus přes sekvenci. Existence StopIteration přestavuje jednu z mála možností, ja mohou všechny možné iterace dát najevo svůj konec (různé kontejnery, generátory...) A co se týká programování s výjimkami a bez výjimek, je to otázka změněného přístupu k tvorbě programu (podle mého k lepšímu). Když to srovnáváte s goto... Dříve neřízené používání goto způsobovalo těžko řešitelné problémy. Postupně to vedlo k objevu strukturovaného programování (Wirth jako představitel). Pořád ale bylo založeno na jednoduchém toku řízení. Proto bylo možné následně testovat, jak to dopadlo před chvílí. Ve školních příkladech se často testování jak to dopadlo pro jednoduchost vynechávalo... protože to zkrátka vede k zaplevelení kódu smetím, které není užitečné z hlediska abstraktního uvažování o problému. Jenže v praxi právě k tomuto jevu dochází a programy se stávají hůře čitelné (se všemi důsledky, jako třeba vznik dalších chyb díky bobtnání kódu). To testování se taky muselo dělat otrocky. Muselo se myslet na všechny možné situace, které mohly selhat. Při rozsáhlejším programu je to na mašlu. Objektové programování představuje další změnu pohledu ve smyslu spolupráce kooperujících objektů. A i když se o tom programátoři v praxi zatím tak moc neuvažují, znamená to potenciálně paralelní činnost těch objektů. Potom už je velmi těžké uvažovat v kategoriích co bylo dříve a co později. Umělá serializace akcí vede k navození situace, kdy by se uplatnil Amdahlův zákon (úzké hrdlo paralelismu). Výjimka je v takovém případě výhodným komunikačním prostředkem, který bude fungovat i v paralelním prostředí. A opět, výjimečný není samotný objekt výjimky, ale způsob, jakým je jeho existence zpracována. V jazycích typu C++ získaly kdysi výjimky přívlastek těžkopádného nástroje. Ale bylo to proto, že existovalo méně zkušeností s tím, jak jsou užitečné a obtížně nahraditelné. A taky to souviselo s vývojem překladačů a s generováním kompilovaného kódu. A taky, v C/C++ se vše měřilo na mikrosekundy a vše je
[python] generatorovy vyraz (bylo Re: nevznik objektu)
Od: David Rohleder [...] si snažím o objasnit některé věci. Imho jsou napřiklad některé z těch syntaktických cukrů špatně - např. odstranění závorek z generátorů (i*i for i in range(4)). Ne, že by se na to nedalo zvyknout, akorát to tady trochu přehnali. Ty závorky nejsou odstraněné. Ty závorky nebyly nikdy potřeba... až na některé výjimky, jako g = (i*i for i in range(4)) Jde jen o specialitu, aby překladač poznal, že to je generátorový výraz. Je to jako numerický výraz -- taky se může zapsat do závorek. g = i*i for i in range(4) File stdin, line 1 g = i*i for i in range(4) ^ SyntaxError: invalid syntax g = (i*i for i in range(4)) g generator object genexpr at 0x0282A580 A určitě to není generátor n-tice. Tu si ale můžu jednoduše z generátorového výrazu vytvořit. V níže uvedeném příkladu už ta syntaktická specialita není nutná, takže je to tuple() s holým generátorovým výrazem uvnitř: t = tuple(i*i for i in range(4)) t (0, 1, 4, 9) Jde taky o to, že generátorový výraz lze napsat na víc řádků. Tady je jiný výraz a je to pitomost, ale pro ilustraci: g = (i*i ...for i in range(4) ...if i 2) g generator object genexpr at 0x0282A648 tuple(g) (9,) Kdyby tam nebyly (u toho výrazu) ty závorky, vypadal by for jako špatně odsazený... a vůbec by to překladači mohlo hodně zamotat hlavu. Nehledě na to, že by se to for mohlo odsadit stejně jako g a pak už by to bylo úplně divné. pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python