Portál AbcLinuxu, 5. listopadu 2025 21:29
Zatím to chápu dokonce i já.
Narážel na to, že komentátor v Quake3Arena hlásí: "two frags left, one frag left". Máš to přesně tak napsaný.
Jestli někdo ví, co se řve v QIII, tak jsem to já.
Proto to tam mám napsaný.
Ale je to třeba i v Nexuizu.
PS: You are tied for the lead. 
Jinak - Python všichni umíme, přejděme k věciPython všichni umíme? O tom ani nevím.
Každopádně PyQt je pro mě hodně zajímavý. Python - tak oblíbenej jazyk, navíc prý "pěknej", moderní a taky se nemusí kompilovat (pro to určitě existuje výraz, ale zrovna mě nenapadá). No a Qt - oblíbenej toolkit. Protože jsem zarytej KDE-user.
Takže jsem moc rád za tenhle seriál.
...a taky se nemusí kompilovat (pro to určitě existuje výraz, ale zrovna mě nenapadá)...interpretovaný
), Java(Sun), C#(obvykle Mono).
... python pyconfig.py >> config.h lwc seg-malloc.c+ > cdir/seg-malloc.c /bin/sh: lwc: command not found make[1]: *** [cdir/seg-malloc.c] Error 127 make[1]: Leaving directory `/home/david/compile/hmmm/toolchain/pyvm' make: *** [all] Error 2a ani s pomocí Google nedám dohromady kde to sakra seženu.
PATH=$PATH:~/bin a znova make, je tu ale další chyba...
gcc -c -O3 -Wall -Wno-parentheses cdir/IO.c -o objdir/IO.o cdir/IO.c:28: error: conflicting types for 'malloc' cdir/IO.c:28: error: conflicting types for 'malloc' make[1]: *** [objdir/IO.o] Error 1 make[1]: Leaving directory `/home/david/compile/hmmm/toolchain/pyvm' make: *** [all] Error 2Nějak mi to není přáno... Každopádně tam píšou, že je to otestovaný jen na x86 (asi 32bit) a že pokud to chci kompilovat na jiné architektuře, mám raději počkat na další verze...
>>> import py_compile
>>> compile('test.py')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: compile() takes at least 3 arguments (1 given)
>>> compile('test.py, test.pyc')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: compile() takes at least 3 arguments (1 given):/ podle manuálu by měl stačit jeden argument... Jde mi z toho hlava kolem.
py_compile.compile(). Viď dokumentácia k modulom.
from py_compile import compile
compile('/home/david/devel/python/test.py')Takhle je to lepší.
Díky za pomoc.
A zkusit si to zkompilovat, ale jinak to dělat nebudu...
#! /usr/bin/env python # -*- coding: UTF-8 -*- import sys, py_compile py_compile.compile(sys.argv[1])a pro adresář:
#! /usr/bin/env python # -*- coding: UTF-8 -*- import sys, compileall compileall.compile_dir(sys.argv[1], 1)To jen kdyby to tu někdo hledal.
__init__() nie je nič iné ako konštruktor.
Takže ešte raz poviem, to čo som chcel povedať:
V jazykoch ako Java sa nový objekt vytvára nasledovným spôsobom:
1) vytvorý sa nový objekt
2) zavolá sa naňho konštruktor
V pythone sa to robí presne tak isto, ibaže je to schované pod "volanie triedy" a konštruktorom skutočne je funkcia __init__. __init__? A videli ste už funkciu __init__ použitú inak ako konštruktor (teda funkciu, ktorá má objekt dostať do správneho začiatočného stavu)? Nehovorím, že výnimky sa nenájdu a hneď ma aj nejaké napadli, ale to sú skutočne výnimky.
Po druhé: to, že python nejaký typ volá, nám ešte vôbec nepovie, čo sa s ním deje. Keď budeme volať funkciu, zrejme sa bude diať niečo iné, ako keď budeme volať triedu. Chcel som poukázať na to, že pod povrchom volania triedy nie je žiadny iný proces ako v Java, C#, atď.
A po tretie: keď už chceme hovoriť o OOP, tak hovorme o Smalltalku. Python nie je OOP jazyk v pravom slova zmysle, ale vďaka tomu, ako bol navrhnutý umožňuje pohodlne programovať objektovo, ale rovnako pohodlne sa v ňom dá programovať aj procedurálne a v budúcnosti zrejme aj funkcionálne.
Aby som to zhrnul, python netreba nijako mystifikovať. Je to síce dobrý jazyk s peknými vlastnosťami, ale pod povrchom leží staré dobré C
Nevytvari sice objekt ve smyslu alokace pameti Narozdil od metody __new__(), ze? Neni tedy spis konstruktor toto? A dostavame se opet k tomu, co jsem rikal. Hledat analogii u oop jazyku implementovanych jinak je silne zavadejici a vede k chybnemu chapani, proto je nevhodne.Milý pane, ste trochu vedľa. Konštruktorom sa v OOP (nie len v Jave, C#, ale v OOP všeobecne) chápe funkcia, ktorá inicializuje objekt ako taký, nestará sa o nízkoúrovňové procesy. Vytvorením objektu sa potom chápe jeho vytvorenie v pamäti (new) a inicializácia (init). Ešte raz to zopakujem, jediný rozdiel oproti Jave je syntaktický: v Pythone napíšeme
= Class(); a v Jave = new Class(), ale v oboch jazykoch vedú tieto výrazy k rovnakému procesu.
A k akému chybnému chápaniu vedie pomenovať funkciu ktorá sa stará o inicializáciu objektu? Jediné chybné chápanie, ktoré som si všimol je vaše, ale pramení zjavne z toho, že neviete, čo to konštruktor je. A to ma dosť zaráža.
Samozrejme, že v čistom OOP existujú len správy, ale Python nie je čistý OOP jazyk.
Konkrétne, pozrite si tento článok. Podstata je, že v staticky typovaných jazykoch exituje len jeden spôsob vytvorenia objektu: volaním konštruktoru, kdežto v čistých OOP stačí poslať triede (ešte nevytvorenému objektu) ľubovoľnú správu a objekt sa vytvorí popritom. AFAIK v pythone niečo takéto nie je možné, ale musí sa najprv objekt vytvoriť a až potom môžeme volať niektorú jeho metódu, i.e.:
ob = Object()
ob.show()
ale nie
ob = Object.show()
a teda v tomto ohľade je pythone takmer rovnaký ako Java, C#. Rovnako sa pritom volá konštruktor (opäť v mojom chápaní) objektu lenže v pythone sa nazýva __init__ a nie Object().
Jinak OOP se doporučuji učit ve Scheme. Tam to pořádně člověk pochopí
def x(a, b):
return a+b
print x(1, 2)
LZE! pokud mam napriklad funkci, ktera jako parametr ocekava funkci, tak tam misto toho muzu klidne soupnout tridu. Oboji jsou to volatelne objekty a je mozne je zamenovat.
Vyborne, tak si to predvedeme prakticky, treba se naucim neco noveho:
def cmpfun(a, b):
if a>b: return 1
if b>a: return -1
return 0
print [1,5,9,7,5,3].sort(cmpfun)
Metoda sort jako parametr ocekava funkci. Predavam funkci cmpfun, prosim o jeji nahrazeni tridou.
metoda __new__ je mnohem nizkourovnovejsi nez __init__. je to spis takovej hack.
Neni to hack a je na stejne urovni jako init, jen se tak casto neprekryva. Vase teorie zacina dostavat trhliny
, a vam chybi poradny argument.
uz jenom cekam, kdy prohlasite za konstruktor C funkci malloc..
To se tedy nacekate. Ani toto neni poradny argument, povazuji to zatim za nezodpovezene.
kdyz vezmu v uvahu jen vas aktualni prispevek, tak napriklad z tohoto: "Tridu s funkci nelze zamenovat. To zduraznuji." mam dojem, ze si python pletete napriklad se silne typovanou Javou, nebo dokonce s C++
Cim dal lepsi.
1) co se tyce zamenovani, pockame na vase reseni prikladu, jestli se vam podari funkci zamenit tridou.
2) bylo by slusne nebrat aktualni prispevek, ktery jste ani nepochopil, ale to, co vas k tomu tvrzeni vedlo. existuje neco takoveho?
3) python je silne typovany, ted si to zas pletete se statickym typovanim
4) kontrolni otazka, je C++ silne typovany jazyk?
##########################################
def x(a, b):
return a+b
print x(1, 2)
>>> class x:
... def __init__(self, a, b):
... self.c = a+b
... def __str__(self):
... return str(self.c)
...
>>> print x(1, 2)
3
# i kdyz pri jinych prilezitostech by bylo potreba napr.
# doplnit metodu __int__ a podobne,
# ale o to v OOP v pojeti pythonu jde. muzete objekty
# zamenovat. pokud rozumi pozadovanym zpravam...
##########################################
>>> def cmpfun(a, b):
... if a>b: return 1
... if b>a: return -1
... return 0
...
>>> print [1,5,9,7,5,3].sort(cmpfun)
None
# predpokladam ze jste si jen neuvedomil, ze metoda sort
# pracuje s puvodnim polem a myslel jste toto:
# a = [1,5,9,7,5,3]
# a.sort(cmpfun)
# print a
######################################################
>>> class cmpfun(int):
... def __new__(cls, a = 0, b = 0):
... if a > b: return int.__new__(cls, 1)
... if a < b: return int.__new__(cls, -1)
... return int.__new__(cls, 0)
...
>>> a = [1,5,9,7,5,3]
>>> a.sort(cmpfun)
>>> print a
[1, 3, 5, 5, 7, 9]
>>>
##########################################################
takze sem prave prokazal, ze funkce a tridy jsou zamenitelny....
mam pocit, ze OOP v pythonu (a podobnych jazycich, napr. smalltalk) prilis nerozumite. Nikoho toti nezajima, ze se jedna o uplne jiny objekt, kdyz shodne reaguje na stejne zpravy....
> Neni to hack a je na stejne urovni jako init, jen se tak casto neprekryva. Vase teorie zacina dostavat trhliny
, a vam chybi poradny argument.
na tom, ze je to hack trvam
> 3) python je silne typovany, ted si to zas pletete se statickym typovanim
jo, to sem poplet. omlouvam se.
> 4) kontrolni otazka, je C++ silne typovany jazyk?
castecne. predpokladejme:
class A { public: int x; };
class B { public: float y; };
void f() {
A* a;
B* b;
*a = *b; // nemozne
a = (A*)b; // mozne bez jakekoli kontroly typu.
// proste se nastavi ukazatel na adresu
// b (obcas se to ale hodi ;))
}
. Ja vsak trvam na tom, ze to hack neni, bez toho byste nemohl delat prave takove veci. Mozna by bylo ale dobre si nejprve definovat co je to hack.
Ad C++, ja jsem toho nazoru, ze silne typovany neni
, protoze umoznuje scitat hrusky s jabkama, dedictvi po C.
Stale stojim o vysvetleni toho, proc se domnivate, ze si python pletu se statickymi jazyky, i kdyz uz zacinam tusit, ze jde o nedorozumneni a ze je to kvuli tomu, ze si pod tvrzenim, ze funkce a tridy nejsou zamenitelne predstavujem kazdy neco jineho.
Pisu trochu zkratkobite, ale to proto, ze to vsechno pracne vytukavam na pda. Jinak co jsem chtel rict tim druhym prikladem jste odhadl spravne, taky slo pouzit sorted().
. prikaz print vola metodu __str__ jak u puvodniho intu, tak i u myho objektu. takze jsou zamenitelny (v tomhle pripade)
> Stale stojim o vysvetleni toho, proc se domnivate, ze si python pletu se statickymi jazyky, i kdyz uz zacinam tusit, ze jde o nedorozumneni a ze je to kvuli tomu, ze si pod tvrzenim, ze funkce a tridy nejsou zamenitelne predstavujem kazdy neco jineho.
asi jsem se unahlil. byl to jenom takovej dojem. Kdyz sem videl jak se snazite funkce a tridy oddelovat, vzpomel sem si na Javu a kolik ma vzdycky reci
> To je samozrejme, jenze jak uz jsem vysvetloval, ja jsem hovoril o zamene jejich funkcnosti. Presvedcil jste me, ze v jednom smeru to jde, tridami lze nahradit funkce, protoze obsahuji metody, ktere jsou funkcnosti blizke funkcim. Naopak se vam to asi nepodari.
jo, naopak to asi nepujde. Kdyz sem rikal, ze jsou funkce a tridy zamenitelny, tak sem myslel jen ten jeden smer. Myslel jsem ze je to zrejme z toho, ze se hadame pod prispevkem, kde kdosi rikal, ze volani QCosi() neni volani funkce. Mel jsem to ale explicitne uvest - moje chyba.
QMainWindow() v pythone neexistuje.
QMainWindow() v skutočnosti vytvorí nový objekt typu QMainWindow a odkaz naňho potom odovzdá ako prvý argument funkcii QMainWindow.__init__() – takže analógiu môžeme vidieť skôr s týmto kódom Javy (C++):win = new QMainWindow();
To len aby sme zatiaľ dali veci na pravú mieru. Určite sa aj k tejto problematike autor neskôr vyjadrí.
Inak fajn článok, držím palec
Díky, už asi měsíc se chystám s PyQt začít, ale nebylo dost času. Teď jsem rád, že jsem počkal 
Išlo mi o to, že komplexné čísla sú náramné užitočné pri počítaní, kvôli vynikajúcim vlastnostiam a len málokedy ich niekto kreslí. Zvyčajne len na strednej škole, aby pani učiteľka ozrejmila žiakom, že sin a cos nadobúdajú veľmi pekný význam
Anyway, teraz už úplne offtopic a čisto zo záujmu, čo napríklad kreslíte?
Ja som sa doteraz stretol len s diferenciálnymi rovnicami popisujúcimi elektrické obvody, ale pritom som si nič nekreslil
Zlata Gaussova rovina nebo LAFCH&LFFCH... Asi ten, kdo vymysli osnovy, vi, proc se tohle nebere
A načo je akože dobré to kresliť? Dúfam, že to nie je len z dlhej chvíle
Ne vážně, jednu FLTK aplikaci mám a líbí se mi to. Je to minimalistický, funkční. Ne tak pěkný jak GTK+, ale co už...
Eric ma odkaz i primo na homepage PyQt. Nerikam rozebirat kazdy IDE vhodny pro Python, ale tohle k PyQt proste patri, tak zminka na dva radky nezabije...
POkouším se nainstalovat na Ubuntu PyQT, ale uz u "python configure.py" to na mě vyplivne:
Traceback (most recent call last):
File "configure.py", line 31, in ?
import sipconfig
ImportError: No module named sipconfig
přitom sip nainstalováno mám. Kdyžtak prosím nekamenovat :) a díky za radu :)
Nahodte Synaptic a vyhledejte python-qt.
Skvely serial, chtel jsem se ucit PyQt ale zatim jsem se k tomu nejak nedostal az ted
. Uz jsem pridal na nej odkaz na PyCZ Wiki.
Jeste se chci zeptat: kolik dilu planujete? Co vsechno hodlate probrat?
Tak kolik dilu to nakonec bude nevim, ale ma idea je takova, ze tak do tretiho dilu bych se chtel u QT dostat k prvkum button, lineEdit, TextLabel. Samozrejme je vysvetleni signalu a slotu trosku do hloubky. V Pythonu se do tretiho dilu vysvetli tvorba vlastnich funkci a snad i trid, textovy vstup, podminky, cykly a mozna zvladnem jeste pokrocilou praci s poli :) Od tretiho dilu bych chtel, aby byla vysledkem kazdeho dilu nejaka pouzitelna aplikace. No a pri tvorbe te aplikace si pak vysvetlime nove prvky, ktere jsme pouzili. Nezavazuju se, ze tohle schema dodrzim
, ale pokud to bude mozne, chtel bych, aby bylo takove.
Moc vsem dekuji za podporu
. Hodne me potesila reakce na clanek 
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.