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 :)

Az interpreter - azaz parancsértelmező - a python paranccsal indítható, feltéve, hogy az elérési út tartalmazza a python telepítés könyvtárát is. A megjelenő három "nagyobbmint" jel jelzi, hogy az értelmező a parancsunkra vár:

$ python
Python 2.6.5
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 + 1
2
>>> 2**100
1267650600228229401496703205376L
>>>

Kilépni a Ctrl-D kombinációval lehet (Windows alatt Ctrl-Z, ha jól tudom), ha az nem segít, akkor a quit() parancs kiadása segíteni fog. A Ctrl-C-vel csak az aktuális parancs futását tudjuk megszakítani. (Illetve egy KeyboardInterrupt "kivételt" - exception - küldünk vele, de erről majd később.)

Amint látható számológépként egyszerűen használható, és nagyon nagy számokat is kezel (a ** operátor a hatványozás, hipphopp kiszámolta a kettő századik hatványát - az L betű a szám végén a long típusra utal, python 3-ban már nincsenek így megkülönböztetve az egész számok).

Ha PYTHONSTARTUP környezeti változóba beállítjuk egy python file nevét, akkor az a python interpreter minden interaktív használata elején lefut (azaz akkor nem, ha paraméterként egy filet adunk meg neki). Pl:

$ cat ~/.pythonrc
import sys
sys.ps1 = "py> "
print "Helyzet?"
$ export PYTHONSTARTUP=~/.pythonrc
$ python
Python 2.6.5
Type "help", "copyright", "credits" or "license" for more information.
Helyzet?
py> 1+1
2
py>

Persze a béna üdvözlőüzeneten és a prompt átállításán kívül akár értelmes dolgokat is lehet itt csinálni :)

Végezetül megemlíteném még az IPython projectet, ami a python interpreter shell egy fajta kibővítése, feljavítása, érdemes kiprobálni.

03aug.

7 Comment for A Python interpreter

  1. slink says:

    Szerintem nincs érv, hogy miért ne az IPython értelmezőt használja bárki. Pont az azonnal kipóbálhatóságban nyújt pótolhatatlan segítséget.

    alias ipython=python

    • RePa says:

      nekem erezhetoen lassabban indul ipython, mint a sima (ez mondjuk akkor problema, ha valami modult hegesztek, es azt csak ugy tudom ujratolteni, ha kilovom az interpretert), de kb igazad van, sokkal kenyelmesebb

  2. Joó Ádám says:

    Nem lehet újratölteni az egyszer már behúzott fájlt? Irb alatt két sorból megvan :

    • RePa says:

      Ez a python "hibaja" (illetve hat design decision), egy mar betoltott modult nem lehet "ujratolteni", az import a mar betoltott modul objektumot emeli be a nevterbe, igy ha ket kulonbozo modulbol hasznalnal egy harmadikat, akkor azt nem tolti be ketszer, csak egyszer, illetve biztos, hogy ugyanazt a verziot hasznaljak majd mindketten. Ilyen szempontbol a modulok pythonban kvazi singletonok.

      Mindenfele trukkos ugyeskedessel meg lehet szabadulni toluk, ha pontosan tudod, hogy mely modulok hivatkoztak arra a konkretra, nincs keresztbehivatkozas, es nehany bolygo is megfeleloen all egyutt, de veszelyes dolog ilyennel kiserletezni.

      (Azt csak zarojelben merem ideirni, hogy egyesek irnak olyan modulokat, amik elso betolteskor "inicializaljak" magukat, es mar az import alkalmaval csinalnak valamit, ami nagyon csunya dolog, mint allapotgepnek hasznalni egy singletont.)

  3. bandris says:

    Ha installalva van az IPython (sudo pip install ipython) akkor a django automatikusan azt hasznalja. (python manage.py shell)

  4. Attila says:
    1. Ujra lehet tolteni mar betoltott modulokat a reload paranccsal.

    2. Eredmes megnezni a bPython-t is !

    • RePa says:
      valoban, shellben a ``reload`` kvazi veszelytelen, rendes alkalmazasnal azert nagyon oda kell figyelni, mik maradnak az elozo verziobol (pl. mar letrehoztunk egy objektumot a reload elott, viszont az belul eloallit valami belso objektumot, ami mar a reload utani verzio, es esetleg mashogy mukodik, mint a regi, akkor csunya dolgok tortenhetnek) (a kommentek ideiglenesen visszaalltak plain textre, mert az rst parser benazik, en meg nyaralok :)

Szólj hozzá