Uncategorized

Hogyan és mivel végezzünk nagy számítási pontosságot igénylő műveleteket?

Ha a Pythonban a számítási műveleteket float típusú operandusokkal végzünk, akkor azt tapasztalhatjuk, hogy nem mindig kapunk pontos, egzakt eredményt, még akkor sem, ha előre ismert számú jegyet tartalmazó véges tizedestört, vagy akár egész szám lenne az eredmény. Például 3*0.14 = 0.42000000000000004, vagy 10e9-10e-9 = 10000000000.0, vagy 2.3-0.1-0.1-0.1 = 1.9999999999999996, amelyek egyike sem pontos eredmény. …

Hogyan és mivel végezzünk nagy számítási pontosságot igénylő műveleteket? Read More »

Korutin és alkalmazása

Az előző bejegyzésben szó volt a generátorról. Azt egy olyan speciális iterátorként jellemeztük, amely lehetővé teszi a kétirányú adatmozgást a hívó kliens program és a generátor között. E tulajdonságot lehet kihasználni korutinok megvalósítására. A korutinok olyan kódszerkezetek, amelyek egymást kölcsönösen meg tudják hívni úgy, hogy egy adott feladatot együttműködve megvalósítsanak. Ezért nevezik az ilyen kódszerkezeteket …

Korutin és alkalmazása Read More »

Mi az iterátor, generátor, generátor-iterátor és iterátor generátor, generátorfüggvény és -kifejezés?

A kérdésben nem egy szójátékról van szó, hanem ezek alapvető fogalmak, de amelyek nem biztos, hogy minden Pythonnal ismerkedő számára világosak. Ezek lényegét fogaljuk össze röviden az alábbiakban. Az iterátor egy olyan objektum, amely minden egyes ismétlődő kérésre (next() függvénnyel vagy a __next__() metódus meghívásával) egy-egy újabb objektumot szolgáltat. Ha nem tud több értéket kiadni, …

Mi az iterátor, generátor, generátor-iterátor és iterátor generátor, generátorfüggvény és -kifejezés? Read More »

Mi az a monkey patching?

A Python az attribútumok definiálhatóságát illetően meglehetősen rugalmas nyelv. Ezért a Pythont használók találkozhatnak a monkey patching kifejezéssel, ami nem jelent mást, mint egy objektum futási időben történő felruházását új adat- vagy metódusattribútummal, vagy egy már meglévő metódusnevéhez új hívható objektum hozzárendelését. Persze nyilván csak akkor, ha az adott objektum engedi az új attribútum létrehozását …

Mi az a monkey patching? Read More »

Mikor és hol használjunk operátort és hasonló eredményt adó függvényt, illetve metódust?

A Pythonban egy feladatot általában több módon, többféle nyelvi lehetőséggel is meg lehet oldani. Így például számos műveletre léteznek operátorok, de ezek mellett vannak függvények vagy metódusok, amelyek hívásával a végeredmény tekintetében hasonlóan célt érünk. Felmerülhet a kérdés, hogy akkor melyik utat válasszuk egy adott feladat esetén. Erre, ahogy az általában lenni szokott, nem lehet …

Mikor és hol használjunk operátort és hasonló eredményt adó függvényt, illetve metódust? Read More »

Hogyan használjuk a reduce() függvényt, ha a redukció során az indexet is figyelembe kell venni, illetve a közbenső részeredményt konstanssal kell szorozni?

A functools modul reduce() függvényét általában akkor javasolt használni, ha a feladatot valamilyen nyelvi szerkezettel (pl. konténerépítő kifejezéssel), vagy beépített redukáló függvénnyel (all(), any(), len(), max(), min(), sum()) nem, vagy csak körülményesen lehet megoldani. Az alábbi ábra A) részében egy egyszerű halmozott összeadás képletét és rendszertechnikai blokksémáját látjuk. Ha az a feladat, hogy az 1,2,3 …

Hogyan használjuk a reduce() függvényt, ha a redukció során az indexet is figyelembe kell venni, illetve a közbenső részeredményt konstanssal kell szorozni? Read More »

Tudtad, hogy kontextuskezelő nem csak fájlműveletekben használható?

A with…as… szerkezetben alkalmazható kontextuskezelő fogalmát legtöbbször a fájlmegnyitással kapcsolatban szokták bevezetni, mert valóban ez talán a leggyakoribb használati eset.  Mindazonáltal a kontextuskezelők sok más helyzetben is alkalmazhatók. Éppen ezért a Python tudásépítés lépésről lépésre című e-könyv „Kontextuskezelők” fejezete szándékosan nem fájlművelethez kötődő példákon keresztül vezeti be és tárgyalja a kontextuskezelők részleteit annak érdekében, hogy …

Tudtad, hogy kontextuskezelő nem csak fájlműveletekben használható? Read More »

Feltételvizsgálatnál ügyeljünk rá, hogy a None ugyan False igazságértékű, de nem minden None, ami False!

Tegyük fel, hogy egy olyan kétparaméteres függvényt akarunk írni, amelynek törzsében csak akkor fut le egy utasítás, ha az argumentumok egyike sem None. Tudjuk, hogy a None igazságértéke False. Ezért akár az alábbi képen látható első megoldás is eszünkbe juthat. Ez azonban nem jó, mert nem csak a None objektumnak False az igazságértéke, hanem például …

Feltételvizsgálatnál ügyeljünk rá, hogy a None ugyan False igazságértékű, de nem minden None, ami False! Read More »

Van-e még használati jelentősége a sorrendtartó OrderedDict típusnak?

Olykor szükség lehet arra, hogy egy szótárobjektumban az elemek (kulcs-érték párok) megőrizzék a bevitel szerinti sorrendjüket. A dict típusú szótár sokáig nem volt sorrendtartó, helyette a collections modul OrderedDict típusát kellett használni. A Python 3.7 verziótól azonban már a dict is megőrzi az elemek sorrendjét, sőt a Python 3.8 verziótól a reversed() függvénnyel is használható, …

Van-e még használati jelentősége a sorrendtartó OrderedDict típusnak? Read More »

Hogyan definiáljunk felülírásvédett konstansokat?

A kérdés elsőre talán még ellentmondásosnak is tűnhet, hiszen a konstans attól konstans, hogy nem változik az értéke a program futása alatt. Ez elméletben így is van. A gyakorlatban azonban más a helyzet. A Python ugyanis nem biztosít alapban külön típust a konstansok definiálásához. Konstanst létrehozni egy szokványos változóhoz történő értékadással lehet azzal a konvencióval, …

Hogyan definiáljunk felülírásvédett konstansokat? Read More »