Entries tagged “python”

Djangos munkalehetőségek

Az utóbbi időben megszaporodtak a postaládámban a "Djangos/Pythonos fejlesztőt keresünk" témájú levelek - aminek személy szerint nagyon örülök, de aki nem talál magának jó munkaerőt, illetve munkahelyzet, az kevésbé.

Első körben mindenkinek ajánlanám a Weblabor munka rovatát, de ha több helyen szeretnétek a hirdetést megjelentetni, akkor nyugodtan kommenteljétek ide ehhez a posthoz az ajánlatotokat, az érdeklődők pedig feliratkozhatnak a post rssére, hogy minél gyorsabban értesüljenek, ha bejön valami új dolog.

Pythonra fel!

Tovább…

22febr.
8

[] is not []

Egy kollegám szembesült ma vele, hogy az bizony nem igaz, hogy:

>>> [] is []
False

Gyorsan rájött segítség nélkül is, hogy a [] kódrészlet mindig új objektumot hoz létre, két különböző új objektum meg természetesen nem ugyanaz. Ezzel kapcsolatban viszont eszembe jutott egy trükkösebb eset.

Tovább…

31jan.
1

Sebesség témája

Szerencsére a böngészőgyártók versenyeznek egymással, ezért - többek között - a javascript motorok is napról napra gyorsabbak lesznek. Eszembe jutott, hogy meg kéne nézni pár egyszerű - és szuperbuta - teszttel, hogy hogyan teljesít a frissen megjelent Google V8.

Hirtelen jött az ötlet, és lusta is vagyok mindenféle grafikont rajzolni, meg bonyolult nyelvek közötti tesztcsomagot kidolgozni (egyébként van ilyen), szóval senki ne vonjon le messze menő következtetéseket :)

Tovább…

14dec.
6

A descriptorok

A descriptorok (leírók) szintén a kedvenc python nyelvi eszközeim közé tartoznak. Teljes boldogságban élhetünk akkor is, ha fogalmunk sincs róluk, de bizonyos helyeken meg tudja szépíteni a programunkat. A dekorátorokhoz hasonlóan nem túl bonyolult dologról van szó, ha valaki használt már Djangót, akkor jó eséllyel találkozott velük, még ha nem is tud a létezésükről.

Djangóban a model mezői általában az adatbázis mezőnek megfeleltethető python típusok:

>>> from pages.models import Page
>>> p = Page()
>>> p.creation_date
datetime.datetime(2010, 8, 31, 10, 7, 30, 909404)
>>> type(p.creation_date)
<type 'datetime.datetime'>

Általában... nézzünk csak meg azonban egy ForeignKey típusú mezőt - ha nem rendelek hozzá értéket, akkor látszik a turpisság:

>>> p.author
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/django/db/models/fields/related.py", line 288, in __get__
    raise self.field.rel.to.DoesNotExist
DoesNotExist

Hmm, milyen __get__? Nezzük csak meg jobban, mi is a author mező:

>>> p.__class__.__dict__['author']
<django.db.models.fields.related.ReverseSingleRelatedObjectDescriptor object at 0x25a9710>
>>> dir(p.__class__.__dict__['author'])
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__',
 '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'field']

És igen, megvan a tettes, aki nem egy sima mező, hanem egy descriptor, akinek már van __get__ (és esetünkben __set__) metódusa is. Na lássuk akkor mik is azok a descriptorok!

Tovább…

01szept.
5

Egy kis dekoráció

A python nyelvben a dekorátor egy "szintaktikai cukor" (szinte fáj az ilyet leírni magyarul), semmi újat nem ad a nyelvhez. A java annotációkhoz hasonló módon közvetlen a dekorálandó objektum elé helyezett, @ karakterrel kezdett kifejezés, amely például a klasszikus dekorátor tervezési minta használatához és sok más egyéb dologhoz jó. Lássuk hát mi is ez pontosan, illetve hogyan kell használni.

Tovább…

19aug.
9

Python és az OOP

Ahogy már írtam, a python egy objektum orientált scriptnyelv, de nem vagyunk rákényszerítve az OOP-re, nyugodtan használhatjuk imperatív/procedurális módon, azaz kb. mintha perl- vagy shellscriptet írnánk. Nem kell main() függvény (mint C-ben), nem kell egy kvázi felesleges osztály egy public static void main(...) metódussal, szépen sorról sorra megcsinálja, amit mondunk neki.

Pár soros scriptecskénél ez hasznos tulajdonság, nagyobb projectekben viszont kerülendő.

Csak címszavakban, mi is az az objektum orientált programozás?

Tovább…

07aug.
9

A Python interpreter

Az egyik kedvenc dolgom a pythonban az az interpreter. Segítségével igen gyorsan ki lehet próbálni kódrészleteket, modulokat, sőt én számológépnek is azt szoktam használni - egy-két terminál mindig nyitva van nálam :)

Tovább…

03aug.
7

Singleton

A weblaboron olvastam ma egy cikket inf3rno tollából, amely az ősosztályként megvalósított singleton problémáját járja körül PHP-ban. (Egyke tervezési minta, de én nem szeretem az ilyeneket lefordítani, mert nagyon suta tud lenni, szerintem.) Pythonban sem egyértelmű a dolog, a klasszikus "legyen privát a konstruktor, és egy metódus adja vissza a példányt" megoldás nem működik, mert pythonban a konstruktor mindig publikus. Ennek ellenére nem az okoz nehézséget, hogy hogyan valósítsuk meg a singletont, hanem hogy a lehetőségek közül melyiket válasszuk :)

Nézzünk néhány példát, a teljesség igénye nélkül! Nem kell megijedni, ha kezdőbb olvasók nem teljesen értik a példákat, megértésükhöz szükséges a python nyelv bizonyos szintű ismerete.

Tovább…

27júl.
5