Re: [python] OT: umazavani adresy pri citaci v mailing listu (bylo Compile-time vs. run-time)
On 7/10/07, Petr Prikryl > Jenže když nemáš rozumně nastaveného mailového klienta, > tak tam tu adresu odesílatele opíše. V tom je ten problém. > Ale podle mého je to do značné míry nastavením maileru. Pro diskuse kolem Pythonu a Djanga pouzivam webovyho klienta gmail.com a jak quotuje, tak holt quotuje. Ale v rade mailistu se ta adresa pouziva pro komunikaci peer-peer. Takze na to urcite neexistuje jednotny pohled. Zkusim si na to u Tebe davat pozor. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] OT: umazavani adresy pri citaci v mailing listu (bylo Compile-time vs. run-time)
> > P.S. Při citaci jména umazávej e-mailovou adresu, prosím. > > Jinak budu chodit domů s kapsama plnýma Viagry a > > šeky z výherních loterií ;) > > Pokusim se o to, ale kdo vi, jaky bude vysledek, protoze to nikdy > nedelam :-) > > BTW, nepatri mezi jednu ze zakladnich zasad pocitacove bezpecnosti > nevystupovat v public forech pod vlastni identitou a s vlastni > domenou? Přiznám se, že jsem výukou počítačové bezpečnosti neprošel, ale doporučovat konspirativnost mi připadá trochu divné. Přispívám prostřednictvím uzavřeného mailing listu. Ten je sice někde archivován a přístupný formou HTML, ale rozumný správce původní e-mailovou adresu vždycky nějak pozmění, aby se nedala nějakým robotkem vykousnout. Jenže když nemáš rozumně nastaveného mailového klienta, tak tam tu adresu odesílatele opíše. V tom je ten problém. Je to stejné, jako kdybys to tam napsala ručně. Doma si člověk může šolichat, co chce a jak chce. Ve firmě to pod kontrolou nemám. Nemůžu si vybrat. Ale podle mého je to do značné míry nastavením maileru. Při přispívání do mailing listu citaci stejně ručně osekávám, ale i kdybych to neudělal, objeví se v citaci tvého příspěvku tohle > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of > Petra Javornicka > Sent: Monday, July 09, 2007 5:41 PM > To: Konference PyCZ > Subject: Re: [python] Compile-time vs. run-time (bylo > Nesrozumitelneprirazovaci prikazy...) Jediná použitelná adresa je tam [EMAIL PROTECTED], a ta je na to dělaná, aby uměla odmítat jakékoliv příspěvky. > A public maily dnes maji na serverech diky bayesovskym filtrum spamy > docela zmaknuty - aspon me toho moc nechodi a napr. gmail pouzivam > proto, ze umi hezky zobrazovat thready Záleží na tom, jak je tvoje mailová adresa moc profláknutá. Je přece jedno, jestli je to tvoje fiktivní adresa nebo ostrá. Protože tu fiktivní chceš taky používat a nenechat ji zahltit, ne? No, a protože jsem v minulých příspěvcích tvou jakoukoliv adresu necitoval, je šance, že si s příchozí poštou nějaký filtr poradí. Ty jsi moji citovala, takže má šance je menší. Možná se pletu a dělám něco špatně. pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Kamera
Jde to docela dobře aspoň co já vím (dělám to pod Windows) je třeba stáhnout modul VideoCapture for Win32. Potom už se to dělá triviálním způsobem: from VideoCapture import Device cam = Device() cam.saveSnapshot('soubor.jpg') Mělo by to fungovat pro různé USB kamery například, používá to DirectShow. Vyžaduje to samozřejmě další moduly, myslím numpy a PIL, možná ještě něco, to bude v dokumentaci. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Znovuspusteni programu
Roman Maňák napsal(a): > Zdravim, > mam jeden program, ktery spoustim docela casto a nekdy i nekolikrat po > sobe. Pokzade mi vsak zustane otevreny Pythonovsky prikazovy radek (ve > Win) a ja jej musim zavrit a program spustit znovu. Nevite jestli > neexistuje nejaka klavesova zkratka, aby se program spustil znovu bez > toho, abych musel zavirat prikazovou radku? > > Většina lidí má problém opačný, tedy že se jim příkazová řádka hned zavře a oni nestihnou nic přečíst ;-) Takže pro tebe platí opačný postup: * nespuštěj python s parametrem -i nebo * na konec programu dej sys.exit() Ručně: CTRL+Z a Enter. -- geon Pavel Kosina ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Znovuspusteni programu
Zdravim, mam jeden program, ktery spoustim docela casto a nekdy i nekolikrat po sobe. Pokzade mi vsak zustane otevreny Pythonovsky prikazovy radek (ve Win) a ja jej musim zavrit a program spustit znovu. Nevite jestli neexistuje nejaka klavesova zkratka, aby se program spustil znovu bez toho, abych musel zavirat prikazovou radku? Predem diky Roman -- Zpráva vytvořena poštovním klientem "M2", který je součástí webového prohlížeče Opera. Více na http://www.opera.com/mail/ . ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] unicode(sys.argv[0],"utf-8")
Happy Day napsal(a): > Dobrý den, > mám jednoduchý kód: > > # -*- coding: utf-8 -*- > import sys > print unicode(sys.argv[0],"utf-8") > To, že máš program uložen v utf8 neznamená, že všechny vstupy a výstupy v něm budou také. Já osobně vždy vyzkouším 4 hlavní - utf8, cp1250, cp852, iso8859-2. Tvůj příklad mi fungoval pod xp s cp1250 asi proto, že windows takto předává parametr ;-) -- geon Pavel Kosina ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] unicode(sys.argv[0],"utf-8")
Ahoj, Happy Day wrote: > [...] > # -*- coding: utf-8 -*- > import sys > print unicode(sys.argv[0],"utf-8") verim tomu, ze na widlich nemas nastavene kodovani utf8, takze bych to spis napsal takhle: print unicode(sys.argv[0], 'pc1250') Leo -- Leos Pol Team Leader Radiante Corp. If it can be imagined, we can implement it ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Dekoratory, Django... (bylo Nesrozumitelne prirazovaci prikazy...)
> > Aspon neco ;-) Jak uz jsem psala: v souvislosti s Python & Django jsme > narazili na dve komunity (jedna neni Python/Django oriented), kde > zustavaji dotazy (nejen nase) bez odpovedi. Nikde jinde jsem se > nesetkala, aby dotaz k problematice zustal nezodpovezeny, aby nekdo > neposlal aspon RTFM nebo douc se to a to. > Divny lidi :-( Django skupin je vic. django-users, django-developers, django-cs... Pak je tady hodne pouzitelne IRC #django > My jsme zrejme s Djangem ve stadiu 'get frustrated', ale hobbisti > nejsme, takze to TG asi nepripada v uvahu. Bud ohneme Django podle > nasich potreb a nebo na Python a jeho frameworky zapomeneme. Co takhle do django-cs zopakovat ony dotazy, co jste dali do django-users? Radek PS: U Pythonu se jeste muzete podivat na ZOPE :) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Compile-time vs. run-time (bylo Nesrozumitelne prirazovaci prikazy...)
On 7/9/07, Petr Prikryl > Technicky a pragmaticky se za kompilované jazyky [...] > Interpretované jazyky umožňují psaní programů, [...] Ja se nebavila o jazykach, ale o compile-time ;-) Ale hlavne ze si rozumime, ne? :-) > P.S. Při citaci jména umazávej e-mailovou adresu, prosím. > Jinak budu chodit domů s kapsama plnýma Viagry a > šeky z výherních loterií ;) Pokusim se o to, ale kdo vi, jaky bude vysledek, protoze to nikdy nedelam :-) BTW, nepatri mezi jednu ze zakladnich zasad pocitacove bezpecnosti nevystupovat v public forech pod vlastni identitou a s vlastni domenou? A public maily dnes maji na serverech diky bayesovskym filtrum spamy docela zmaknuty - aspon me toho moc nechodi a napr. gmail pouzivam proto, ze umi hezky zobrazovat thready ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] unicode(sys.argv[0],"utf-8")
Dobrý den, mám jednoduchý kód: # -*- coding: utf-8 -*- import sys print unicode(sys.argv[0],"utf-8") Soubor je uložen v PSPadu ve formátu utf-8. sys.argv je seznam jehož prvek s indexem [0] má být cesta odkud je * .py spuštěn. To funguje super když teda není v názvu (ani v celé cestě) žádný český znak. Když spustím "á.py" tak se zobrazí: Traceback (most recent call last): File "E:\Python\PYTHONS\ß.py", line 3, in print unicode(sys.argv[0],"utf-8") UnicodeDecodeError: 'utf8' codec can't decode bytes in position 18- 20: invalid d ata Děkuji za každou reakci. Vlastimil Ovčáčík ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Compile-time vs. run-time (bylo Nesrozumitelne prirazovaci prikazy...)
Petra Javornicka > Petr Prikryl > > V Pythonu se v čistém slova smyslu nic nedělá v compile-time. > > Všechno jede spíš v run-time. Jde jen o to jestli dříve (při > > Ja bych v cistem slova smyslu rekla, ze se to preklada, protoze vznika > nejaky p-kod, ne? A kdyz se neco preklada, tak je to v compile-time, > ne? Odpovím nejdříve příkladem: = # Tady uz se provede prvni prikaz a o existenci f1() se vubec nevi. print dir() # Teprve tady vznika f1(), neprovadi se, jen se generuje jeji kod. def f1(): print 'f1' print dir() # Tady se uz o f1() vi. f1()# f1() se spousti, ale o f2() se jeste nevi. f = f1 # f1() si zpristupnujeme pres jmeno f, print dir() # ktere se objevuje v prostoru jmen f() # a f() se hned spousti. # Teprve tady vnika funkce f2() def f2(): print 'f2' print dir()# Teprve tady se o f2() vi. f1() f() f2() = Po spuštění to vypadá takto: = c:\tmp>python e.py ['__builtins__', '__doc__', '__file__', '__name__'] ['__builtins__', '__doc__', '__file__', '__name__', 'f1'] f1 ['__builtins__', '__doc__', '__file__', '__name__', 'f', 'f1'] f1 ['__builtins__', '__doc__', '__file__', '__name__', 'f', 'f1', 'f2'] f1 f1 f2 = Prakticky vzato, interpretační a kompilační překladače se liší jen ve způsobu implementace. Nakonec se vždycky provádějí strojové instrukce, které odpovídají zdrojovému textu. Ryzí interpretry, které vůbec neprovádějí překlad do nějakého mezikódu, jsou buď určeny na výpočetně jednoduché věci (shell, cmd), nebo jsou historicky cenné (někdy obojí ;) S rychlejšími počítači a s vývojem technik překladu se objevují hybridní přístupy (Java s Just In Time překladačem, C#). Technicky a pragmaticky se za kompilované jazyky pokládají ty, které dokáží vyprodukovat spustitelný strojový kód v době překladu, se vším všudy, včetně typové kontroly. Kompilované jazyky tím pádem poskytují maximální možný výkon (pokud překladač zná detaily cílové architektury, procesoru...). Interpretované jazyky umožňují psaní programů, které generují nebo upravují svůj vlastní kód za běhu. pepr P.S. Při citaci jména umazávej e-mailovou adresu, prosím. Jinak budu chodit domů s kapsama plnýma Viagry a šeky z výherních loterií ;) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezidefinice standalone funkci v modulu
On 7/9/07, Petr Prikryl <[EMAIL PROTECTED]> wrote: > Petra Javornicka > V Pythonu se v čistém slova smyslu nic nedělá v compile-time. > Všechno jede spíš v run-time. Jde jen o to jestli dříve (při Ja bych v cistem slova smyslu rekla, ze se to preklada, protoze vznika nejaky p-kod, ne? A kdyz se neco preklada, tak je to v compile-time, ne? ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezidefinice standalone funkci v modulu
Petra Javornicka > regnarG > > > Je to úplně to samé. Zavolá funkci a výsledek vloží do proměnné. > > Jediný rozdíl je v tom, že D je funkce která vrací funkci. > > IMHO ale to je ten nejpodstatnejsi rozdil, protoze ta D funkce tu > druhou vraci v 'compile-time' , zatimco ta vracena se vykona az v > 'run-time' a pri cteni toho zapisu clovek musi vedet, ze ta D funkce > vraci jinou 'executive' funkci, proto mi ten zapis nedaval porad > smysl. Pak samozrejme interpetr nepotrebuje nic poznavat. V Pythonu se v čistém slova smyslu nic nedělá v compile-time. Všechno jede spíš v run-time. Jde jen o to jestli dříve (při zpracování definice funkce) nebo později (po dokončení zpracování definice funkce, kdy ji můžeme hned volat). pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Dekoratory, Django... (bylo Nesrozumitelne prirazovaci prikazy...)
On 7/9/07, Petr Prikryl <[EMAIL PROTECTED]> wrote: > Python má fantastickou komunitu -- i v Česku a na Slovensku. ;) Aspon neco ;-) Jak uz jsem psala: v souvislosti s Python & Django jsme narazili na dve komunity (jedna neni Python/Django oriented), kde zustavaji dotazy (nejen nase) bez odpovedi. Nikde jinde jsem se nesetkala, aby dotaz k problematice zustal nezodpovezeny, aby nekdo neposlal aspon RTFM nebo douc se to a to. Divny lidi :-( > Upřímně řečeno, tohle je vlastnost každé dokumentace, > na jejíž formu nejsi zvyklá, ne? Jen do urcite miry. Treba SQLite, MySQL nebo Postgre maji taky jiny styl dokumentace a treba BOL k MSSQL jiny styl nez MSDN nebo Borland, ale ta Pythonacka mi pripada hodne divna. Ale treba je to tim, ze je vsechno poznameno tim Multi-Python's cirkusem, kterymu jsem taky nikdy neprisla na chut :-) > Za Django nemůžu mluvit. Vím o něm, ale nepoužívám ho. > Některé odpovědi možná najdeš prostřednictvím odkazu > > http://groups.google.com/group/turbogears/browse_thread/thread/d3998a4e750c39c9/4d7710c0297e36c3 Jo, koukali jsme i po TurboGears, ale ty se zdaly jeste horsi. Nejspis to presne vystihl tento prispevek: If you're quite new to Python programming and web programming in general, then I'd suggest Django. It's better documented and easier to get started in. If you get frustrated that you can't do certain things in it, then give TurboGears a look. [...] So maybe, TurboGears for hobby or learning. Django for high-pressure work environment. TurboGears for low-pressure work environment (ie when you get to do your learning on the job). ### My jsme zrejme s Djangem ve stadiu 'get frustrated', ale hobbisti nejsme, takze to TG asi nepripada v uvahu. Bud ohneme Django podle nasich potreb a nebo na Python a jeho frameworky zapomeneme. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezi definice standalone funkci v modulu
On 7/9/07, regnarG <[EMAIL PROTECTED]> wrote: > Je to úplně to samé. Zavolá funkci a výsledek vloží do proměnné. Jediný > rozdíl je v tom, že D je funkce která vrací funkci. IMHO ale to je ten nejpodstatnejsi rozdil, protoze ta D funkce tu druhou vraci v 'compile-time' , zatimco ta vracena se vykona az v 'run-time' a pri cteni toho zapisu clovek musi vedet, ze ta D funkce vraci jinou 'executive' funkci, proto mi ten zapis nedaval porad smysl. Pak samozrejme interpetr nepotrebuje nic poznavat. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Dekoratory, Django... (bylo Nesrozumitelne prirazovaci prikazy...)
Petra Javornicka > Petr Prikryl > > > Jestli nemáte chuť do toho se Python aspoň trošku naučit, > [...] > > smažte ho rovnou. Ale za 2 dny mu na chuť nepřijdete. > > No to abych se skoro ohradila ;-) Malá provokace k provedení opaku je někdy lepší, než přesvědčování... ;) > Kdybychom nemeli chut se Python *ucit*, tak se jim vubec nebudeme > zabyvat, protoze za dobu, kterou jsme stravili studiem Pythonu a > Djanga bychom meli davno tu web aplikaci hotovou. A jestli to > smazeme, tak proto, ze dojdeme k nazoru, ze s jinou technologii > udelame s mensimi naklady vice muziky... "One-time Dane Bjarne Stroustrup has never called C++ an "object-oriented programming language," and has noted on occasion that if you want to use Smalltalk, then you should use Smalltalk: Smalltalk is the best Smalltalk there is." (citováno z http://www.artima.com/weblogs/viewpost.jsp?thread=167119, také http://www.research.att.com/~bs/hopl2.pdf) > A co se tyce vlastniho procesu uceni - potrebovali bychom nejakou > slusnou dokumentaci/ucebnici. Python tutorial jsme zvladli, > Pilgrimmovo Dive in Python taky, ale s reference guidem, ten nam > pripada trochu poslabsi - nektere veci jako napr. logging jsou tam > rozebirany vcetne prikladu ad absurdum, jine veci jsou jen letmo > dotceny. Python má fantastickou komunitu -- i v Česku a na Slovensku. ;) > Treba zrovna ty dekoratory: kdyz je budes hledat v obsahu - > nejsou. V indexu - nejsou. Kdyz je predhodis Googlu a omezis ho na > site:docs.python.org, tak to najde tu kapitolu, cos mi poslal. Ale tam > nikde neni uvedeno, ze dekorator musi vracet jinou 'executive' funkci. To už je vlastnost referenčních příruček. Bývají stručné a neopakují se. Lehko se dá přehlédnout, že ve třetím odstavci pod modrým rámečkem je napsáno: "A function definition may be wrapped by one or more decorator expressions. Decorator expressions are evaluated when the function is defined, in the scope that contains the function definition. The result must be a callable, which is invoked with the function object as the only argument." I v tom odstavečku se dá přehlédnout "The result must be a callable". Některé pojmy jsou trochu specifické, ale současně je nutné brát v úvahu specifičnost dynamických jazyků. Fakt je, že dekorátory jsou poměrně mladé. > To se predpoklada jaksi samo sebou. Zato na teze strance maji naprosto > banalni default argumenty i s prikladem. A teprve, kdyz das Googlu > hledat samotny dekorator, najdes ho nekde v PEP318 (nebo kolik). To jo. PEP jsou někdy na pochopení mnohem lepší a pak ještě archivované diskuse k PEP. > Takze vic nez uceni vlastniho Pythonu nam zabira vyznat se v jeho > dokumentaci a najit v ni relevantni informace. Jeste horsi je to > s tim Djangem :-( Upřímně řečeno, tohle je vlastnost každé dokumentace, na jejíž formu nejsi zvyklá, ne? Když si vzpomenu na první setkání s unixovským man, ani mi to nepřišlo. Bylo to dávno, a moc možností v té době nebylo. Když jsem poprvé viděl microsoftí help, kroutil jsem hlavou. Dnes s ním dělám víc a už jsem zapoměl, jak se orientovat v manovských stránkách. "Pořádek je pro blbce. Inteligent ovládá chaos." Někdy neškodí trocha pořádku, ale všechno dělají lidi. Za Django nemůžu mluvit. Vím o něm, ale nepoužívám ho. Některé odpovědi možná najdeš prostřednictvím odkazu http://groups.google.com/group/turbogears/browse_thread/thread/d3998a4e750c39c9/4d7710c0297e36c3 pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezi definice standalone funkci v modulu
Petra Javornicka napsal(a): > On 7/9/07, regnarG <[EMAIL PROTECTED]> wrote: > > >> d=D(f) a d=D(n) je přece pořád to samé (až na název proměnné :D). >> > [...] > >> h=f(2) uloží do h návratovou hodnotu volání funkce f pro dva >> g=D(f) uloží do g odkaz na novou funkci obalující f >> > > Jak je videt, tak to to samy neni, protoze stejna syntaxe, ale jina semantika. > Cim se teda ten interpretr ridi? - ze kdyz funkce dostane proceduralni > argument, tak to bere jako odkaz a ne jako volani? > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > Je to úplně to samé. Zavolá funkci a výsledek vloží do proměnné. Jediný rozdíl je v tom, že D je funkce která vrací funkci. Podle toho to python "pozná". I když to vlastně nemusí poznávat pro Python je všechno bezejmený objekt, ať už je to číslo nebo funkce, zachází s tím naprosto stejně. Je to jako napsat i=6; i=fact(i); jen tady je místo čísla funkce, ale princip je stejný. Ta proměnná je jen pojmenovaným ukazatelem na objekt, ať už je to řetězec, číslo, nebo funkce... -- regnarG http://regnarg.kx.cz ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezidefinice standalone funkci v modulu
On 7/9/07, Petr Prikryl <[EMAIL PROTECTED]> wrote: > Jestli nemáte chuť do toho se Python aspoň trošku naučit, [...] > smažte ho rovnou. Ale za 2 dny mu na chuť nepřijdete. No to abych se skoro ohradila ;-) Kdybychom nemeli chut se Python *ucit*, tak se jim vubec nebudeme zabyvat, protoze za dobu, kterou jsme stravili studiem Pythonu a Djanga bychom meli davno tu web aplikaci hotovou. A jestli to smazeme, tak proto, ze dojdeme k nazoru, ze s jinou technologii udelame s mensimi naklady vice muziky... A co se tyce vlastniho procesu uceni - potrebovali bychom nejakou slusnou dokumentaci/ucebnici. Python tutorial jsme zvladli, Pilgrimmovo Dive in Python taky, ale s reference guidem, ten nam pripada trochu poslabsi - nektere veci jako napr. logging jsou tam rozebirany vcetne prikladu ad absurdum, jine veci jsou jen letmo dotceny. Treba zrovna ty dekoratory: kdyz je budes hledat v obsahu - nejsou. V indexu - nejsou. Kdyz je predhodis Googlu a omezis ho na site:docs.python.org, tak to najde tu kapitolu, cos mi poslal. Ale tam nikde neni uvedeno, ze dekorator musi vracet jinou 'executive' funkci. To se predpoklada jaksi samo sebou. Zato na teze strance maji naprosto banalni default argumenty i s prikladem. A teprve, kdyz das Googlu hledat samotny dekorator, najdes ho nekde v PEP318 (nebo kolik). Takze vic nez uceni vlastniho Pythonu nam zabira vyznat se v jeho dokumentaci a najit v ni relevantni informace. Jeste horsi je to s ti Djangem :-( ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichanemezidefinice standalone funkci v modulu
pepr > Za klíčové považuji pochopit, jak funguje dekorování funkce > bez použití @. Je to historicky starší, funguje to úplně > stejně, jen se to líp zapisuje a čte (což je důležité). Opravuji se, s těmi dekorátory se to líp čte (samozřejmě) ;) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezidefinice standalone funkci v modulu
Petra Javornicka > > [...] To je jasny, ale porad nevim, odkud bere interpretr > odlisit informaci, aby mohl > g=D # pointer > d=D(f) # taky pointer :-O > d=D(n) # dereference - call > > U syntaxe dekoratoru s prefixem '@' se to zda byt jasny. > Ale u funkce utrousene nekde mezi definicemi? Za klíčové považuji pochopit, jak funguje dekorování funkce bez použití @. Je to historicky starší, funguje to úplně stejně, jen se to líp zapisuje a čte (což je důležité). To "u funkce utroušené mezi definicemi" je taky důležité pro pochopení. Při zápisu bez @ lze dekorování provést až za koncem definice funkce. Pythonovský zdroják se zpracovává sekvenčně shora dolů a ihned se provádí. Když se narazí na definici funkce, vytváří se vnitřní objekt funkce (ekvivalent kompilace) a vytvoří se reference pojmenovaná předepsaným identifikátorem funkce. Ten identifikátor ale od té doby není nijak výsadní (snad jen, že je v objektu funkce textově zachycen pro účely ladění nebo pro jiné introspektivní použití). Pokud mám například def mojeFunkce(n): return n * 5 Pak si ji můžu kdykoliv přejmenovat: f = mojeFunkce ... protože identifikátor mojeFunkce je jen pojmenovaná reference na vnitřní objekt funkce (objekt v technickém smyslu, tj. podoba, do které je definice funkce zpracována). Můžu si pak ověřit, že příkazy vypíšou stejnou identifikaci print id(mojeFunkce) print id(f) ... která je v momentální implementaci Pythonu totožná s adresou (objektu) funkce. Za předpokladu, že reference odkazuje na "callable" objekt, chápe se za volání zápis, kdy za referenci uvedu kulaté závorky (s argumenty nebo bez). Když se následující příklad uloží do souboru d.py def mojeFunkce(n): return n * 5 f = mojeFunkce print id(mojeFunkce) print id(f) print mojeFunkce(3) print f(3) def trivialniDekorator(fce): return fce f = trivialniDekorator(mojeFunkce) print id(mojeFunkce) print id(f) print mojeFunkce(3) print f(3) def prazdnyDekorator(fce): def obalujici_funkce(n): return fce(n) return obalujici_funkce f = prazdnyDekorator(mojeFunkce) print id(mojeFunkce) print id(f) print mojeFunkce(3) print f(3) def plusJedna(fce): def plusOne(n): return fce(n) + 1 return plusOne # Znovu pouziju identifikator mojeFunkce. Od teto chvile se # zahodi reference na puvodni objekt funkce, coz ale neznamena, # ze by objekt puvodni funkce zanikl. mojeFunkce = plusJedna(mojeFunkce) print id(mojeFunkce) print mojeFunkce(3) # Pri selhani volane funkce se vypise trasovaci zprava, ktera mimo # jine uvadi originalni identifikace funkce, ktera je sice stejna, jako # pojmenovana reference, ale novy identifikator jiz odkazuje na funkci # na jine adrese. print id(mojeFunkce) mojeFunkce(None) Pak se po zavolání programu vypíše následující C:\tmp>python d.py 17722800 17722800 15 15 17722800 17722800 15 15 17722800 17722992 15 15 17723120 16 17723120 Traceback (most recent call last): File "d.py", line 52, in mojeFunkce(None) File "d.py", line 35, in plusOne return fce(n) + 1 File "d.py", line 2, in mojeFunkce return n * 5 TypeError: unsupported operand type(s) for *: 'NoneType' and 'int' pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Kamera
Dne Sunday 08 of July 2007 21:17:47 Jirka Vejrazka napsal(a): > Pod Linuxem s kamerou zrejme pujde pracovat pres nejake zarizeni v /dev > (nemam s tim zkusenost) je to Video4Linux (v4l) a /dev/videoX ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezidefinice standalone funkci v modulu
> V obou případech se jedná o volání funkce. Avšak D(f) vrací nově vyrobenou > funkci, což je možná matoucí. Jojo - to je ten stripek do mozaiky - dokud se clovek nepodiva, ze je uvnitr D(f) zahnizdena dalsi funkce, ktera udela skutecnou praci v run-time, zatimco ta D(f) se spusti jen compile-time, tak je z toho Gogo Petra ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezidefinice standalone funkci v modulu
> > h=f(2) uloží do h návratovou hodnotu volání funkce f pro dva > > g=D(f) uloží do g odkaz na novou funkci obalující f > > Jak je videt, tak to to samy neni, protoze stejna syntaxe, > ale jina semantika. > Cim se teda ten interpretr ridi? - ze kdyz funkce dostane > proceduralni argument, tak to bere jako odkaz a ne jako volani? V obou případech se jedná o volání funkce. Avšak D(f) vrací nově vyrobenou funkci, což je možná matoucí. Jan Matějka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezi definice standalone funkci v modulu
On 7/9/07, regnarG <[EMAIL PROTECTED]> wrote: > d=D(f) a d=D(n) je přece pořád to samé (až na název proměnné :D). [...] > h=f(2) uloží do h návratovou hodnotu volání funkce f pro dva > g=D(f) uloží do g odkaz na novou funkci obalující f Jak je videt, tak to to samy neni, protoze stejna syntaxe, ale jina semantika. Cim se teda ten interpretr ridi? - ze kdyz funkce dostane proceduralni argument, tak to bere jako odkaz a ne jako volani? ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezidefinice standalone funkci v modulu
Mozna pomuze tento priklad: def dekoruj_funkci(f): #funkce, ktera vytvari FUNKCI def dekorovana(): #vytvorime novou funkci obalujici funkci f print "pred volanim" f() print "po volani" return dekorovana def index(): print "index" index=dekoruj_funkci(index) #prekryjeme puvodni funkci index (do promenne index vlozime novy obsah (funkci) navraceny funkci dekoruj_funkci) index() #volani prekryte fynkce Jan Matejka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Nesrozumitelne prirazovaci prikazy zamichane mezi definice standalone funkci v modulu
Petra Javornicka napsal(a): > On 7/9/07, Karel Šrot <[EMAIL PROTECTED]> wrote: > > >> Treba necht je neco_udelam_s_funkci diferencialni operator D, ktery >> funkci derivuje. Potom >> g = D(f) >> definuji funkci g, ktera je derivaci funkce f >> > [...] > >> d = D(f)(1) urcime hodnotu derivace funkce f v bode 1, coz je totez jako >> d = g(1) >> > > To je jasny, ale porad nevim, odkud bere interpretr informaci, aby mohl > odlisit > g=D # pointer > d=D(f) # taky pointer :-O > d=D(n) # dereference - call > > U syntaxe dekoratoru s prefixem '@' se to zda byt jasny. Ale u funkce > utrousene nekde mezi definicemi? > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > d=D(f) a d=D(n) je přece pořád to samé (až na název proměnné :D). Pokaždé když je použita syntaxe funkce(parametry), jedná se o volání. Funkce zrovnatak jako parametry může být i výrazem, takže lze např. polefunkci[0](). Ale návratovou hodnotou tohoto volání může být taky funkce, kterou lze poté dál využít. Dekorátor je v podstatě funkce, která příjmá funkci jako parametr a vrací funkci. A s touto vrácenou funkcí lze potom dále pracovat, nebo ji zavolat. takže f2=f uloží do f2 odkaz na funkci f h=f(2) uloží do h návratovou hodnotu volání funkce f pro dva g=D(f) uloží do g odkaz na novou funkci obalující f a=g(1) tuto funkci zavolá b=D(f)(1) oba předchozí příkazy najednou -- D(f) vrací funkci, která je v tom samém výrazu volána s paprametrem 1 -- regnarG http://regnarg.kx.cz ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python