Programovací jazyk Python
Co je Python? Python je moderní, platformně nezávislý, interpretovaný programovací jazyk s automatickou správou paměti a dynamickými datovými typy. Umožňuje rychlejší a efektivnější vývoj aplikací než C/C++, Java nebo.net Podporuje platformy Windows, Unix (Linux), OS/2, Macintosh (OS X) Výborně spolupracuje s jinými programovacími jazyky SDK Pythonu obsahuje API rozhraní pro jazyk C Existuje implementace Python syntaxe nad jazykem Java (lze programovat plnohodnotné Java aplikace v jazyce Python) Python lze používat v interaktivním módu, nebo jako klasický prog. jazyk Existuje celá řada aplikací (komerčních i open source), které používají Python jako rozšiřující/skriptovací technologii Caligari TrueSpace, Blender,
Python vs. Jiné programovací jazyky Rychlost výpočtu Rychlost pořízení zdrojového kódu Objektová orientace GUI Vývojové prostředí Vhodnost pro velké projekty Dostupnost knihoven Python 2,5 1 1 1* 1 1 2 Perl 2,5 1 2,5 2* 2,5 2,5 1.NET 2 1,5 1 1 1 1 2 C 1 3 4 3* 1 2 2 C++ 1 2,5 1 1* 1 1,5 2 Java 2,5 2 1 2 1 1 2 hodnoceno jako ve škole 1-nejlepší, 4-nevyhovující *) za použití externích knihoven
Python a Hello World! Python: print "Hello World!" Java: public class Hello { public static void main(string[] args) { System.out.println("Hello World!"); } } C/C++: #include <stdio.h> void main(void) { printf("hello World!"); }
Kde získat Python? Instalace pythonu: Windows: Linux: Python je šířen ve formě jednoduchého instalátoru (obsahuje interpreter, knihovní soubory, základní moduly a jednoduché IDE) http://www.python.org/, http://www.python.org/download/releases/2.5.1/ Python je součástí každé distribuce Linuxu, a/nebo je distribuován ve formě balíčků Vybraná vývojová prostředí: Windows/Linux: Libovolná distribuce Eclipse + rozšíření PyDev SPE Windows: Linux: http://www.eclipse.org/downloads/, http://pydev.sourceforge.net/download.html (balíčky) http://pythonide.blogspot.com/ (balíčky) PyScripter http://pyscripter.googlepages.com/home Erik (balíčky)
Interaktivní konzola Spuštění Pythonu: Windows: Linux: Soubor python.exe (pythonw.exe). Je užitečné doplnit cestu k exe souborům do systémové proměnné PATH. V terminálu napíšeme příkaz python
Eclipse IDE + PyDev (doporučeno)
PyScripter IDE
Shrnutí Automatická správa paměti Jednoduchá syntaxe a sémantika Použitelný pro všechny hlavní platformy Vysoce modulární Vhodný pro psaní skriptů i rozsáhlých projektů Dostatečně rychlý a snadno rozšířitelný o moduly napsané v C/C++ Snádná tvorby GUI pomocí knihoven třetích stran (wxpython, PyGTK, PyQt, ) Zabudované funkce pro trvalé ukládání objektů, vyspělá asociativní pole Výkonné knihovny pro numerické výpočty, manipulace s obrázky, Podpora webových technologií (tvorba webových skriptů, webových služeb (server i klient), ) Podpora široké a aktivní komunity uživatelů Lze ho integrovat s řadou jiných programovacích jazyků Jython, Moduly v C/C++
Přehled jazyka Python
Základy jazyka (1/2) Odsazování textu a bloková struktura kódu Python používá pro určení struktury kódu odsazování Program, který není správně odsazený je syntakticky vadný! Komentáře jsou uvozeny znakem # Víceřádkové dokumentační komentář jsou uvezeny a = 5 b = 6 if a < b: print "A je mensi nez b" else: print "B je mensi nez a"
Základy jazyka (2/2) Přiřazování proměnných Proměnné v Pythonu nemají deklarovaný datový typ Datový typ je vázán na objekt, ne na proměnnou, která s objektem pracuje Jedné proměnné lze v jednom programu přiřadit data různých typů Existují globální a lokální proměnné. Každá proměnná je implicitně považována za lokální. Globální proměnné jsou uvozeny klíčovým slovem global >>> a = "Ahoj" >>> print a 'Ahoj' >>> a = 5 >>> print a 5
Interní datové typy Python obsahuje tyto interní datový typy: Čísla Celá čísla Dlouhá celá čísla Desetinná čísla Komplexní čísla Seznamy N-tice Slovníky Řetězce Souborové objekty
Interní datové typy - Čísla Celá čísla 1, -3, 42, 255 Dlouhá celá čísla 42L, 851324164610465465014640640646L Čísla s desetinnou čárkou: 3.1415927, 31e12, -6e-4 Komplexní čísla: 3+2j, -4-6j Se všemi číselnými typy lze provádět tyto základní aritmetické operace: Sčítání (+) Odčítání (-) Násobení (*) Dělení (/) Mocnina (**) Modulo (%)
Příklady operací s číselnými typy Celá čísla: >>> 2+2 4 >>> # Toto je komentář... 2+2 4 >>> 2+2 # a toto je komentář na řádků s kódem 4 >>> (50-5*6)/4 5 >>> # Dělení celých čísel vrací celý výsledek... 7/3 2 >>> 7/-3-3
Příklady operací s číselnými typy Desetinná čísla: >>> 3 * 3.75 / 1.5 7.5 >>> 7.0 / 2 3.5 Komplexní čísla: >>> 1j * 1J (-1+0j) >>> 1j * complex(0,1) (-1+0j) >>> 3+1j*3 (3+3j) >>> (3+1j)*3 (9+3j)
Matematické funkce Vestavěné funkce: abs, divmod, cmp, coerce, float, hex, int, long, max, min, oct, paw, round Další funkce: Další matematické funkce jsou uloženy v modulu math from math import * acos, asin, atan, atan2, ceil, cos, cosh, e, exp, fabs, floor, fmod, frexp, hypot, ldexp, log, log10, mod, pi, pow, sin, sinh, sqrt, tan, tanh Speciální moduly: NumPy Maticové výpočty, rychlá Fourierova transformace (FFT),
Interní datové typy - Seznamy Seznamy jsou obdobou (dynamických) polí v C/C++ nebo Javě Prvky v seznamu jsou indexovány celočíselnými hodnotami (od 0) Indexy mohou být kladné (postupuje se od začátku seznamu), nebo záporné (postupuje se od konce seznamu) Jeden seznam může obsahovat položky libovolných typů, nebo další seznamy Se seznamy lze operovat pomocí vestavěných funkcí, nebo matematických operátorů Seznamy lze převádět na n-tice pomocí funkce tuple() Prvky seznamu i indexy se píší do hranatých závorek. Prvky jsou oddělovány čárkou
Příklady vytvoření seznamů Ručně vytvořený seznam: >>> a = ['spam', 'eggs', 100, 1234] >>> a ['spam', 'eggs', 100, 1234] Vypočtený seznam: >>> a = 3 * ['ahoj'] + [1, 2, 3] >>> a ['ahoj', 'ahoj', 'ahoj', 1, 2, 3] >>> a = [i for i in range(0, 10) if i%3 == 0] >>> a [0, 3, 6, 9]
Indexování seznamů >>> a = ['ahoj', 'nazdar', 100, 1234] >>> a ['ahoj', 'nazdar', 100, 1234] >>> a[0] 'ahoj' >>> a[3] 1234 >>> a[-2] 100 >>> a[1:-1] ['nazdar', 100] >>> a[:2] + ['cau', 2*2] ['ahoj', 'nazdar', 'cau', 4]
Řezy seznamů >>> # Nahrazení položek:... a[0:2] = [1, 12] >>> a [1, 12, 123, 1234] >>> # Odstranění položek:... a[0:2] = [] >>> a [123, 1234] >>> # Vložení položek:... a[1:1] = ['hi', 'bye'] >>> a [123, 'hi', 'bye', 1234] >>> # Vožení kopie sebe sama na počátek >>> a[:0] = a >>> a [123, 'hi', 'bye', 1234, 123, 'hi', 'bye', 1234] >>> # Ostranění všech prvků seznamu >>> a[:] = [] >>> a []
Zabudované funkce a/pro seznamy Kromě operací s indexy lze seznamy modifikovat pomocí zabudovaných funkcí, atributů a operátorů Funkce přebírají seznam jako parametr len(), del(), min(), max() Atributy jsou volány jako členské funkce seznamu append(), insert(), remove(), reverse(), sort(), index(), count(), pop() Operátory aplikovatelné na seznamy in, not in
Příklady využití funkcí seznamů Funkce: >>> a = ['ahoj', 1, 2] >>> a ['ahoj',1,2] >>> len(a) 3 >>> del a[0] >>> a [1, 2] Atributy: >>> a.append('nazdar') >>> a [1, 2, 'nazdar'] >>> a.insert(1, 1.5) >>> a [1, 1.5, 2, 'nazdar'] >>> a.remove(1.5) >>> a [1, 2, 'nazdar']
Vnořování seznamů, kopie seznamů Seznamy lze vnořovat do sebe (vícerozměrné matice) Prvkem seznamu může být i jiný seznam Při kopírování vnořených seznamů rozlišujeme mělké a hluboké kopie U mělké kopie se nová instance seznamu odkazuje na vnořené seznamy originálu Hluboká kopie vytvoří kompletně nový seznam a také nové instance vnořených seznamů
Příklady vnoření seznamů Vnoření: >>> vnoreny = [0] >>> original = [vnoreny, 1] >>> original [[0], 1] >>> vnoreny[0] = 'nula' >>> original [['nula'], 1] >>> original[0][0] = 0 >>> original [[0], 1] >>> vnoreny = 2 >>> original [[0], 1]
Příklady kopií seznamů Mělká a hluboká kopie: >>> melka = original[:] >>> melka [[0], 1] >>> import copy >>> hluboka = copy.deepcopy(original)
Interní datové typy N-tice Datová struktura podobná seznamu Lze je vytvářet, ale vytvořené n-tice již nelze modifikovat Používají se např. pro předávání složitějších parametrů (jako argumenty funkce nebo návratové hodnoty) Další vlastnosti: Prvky v n-tici jsou indexovány celočíselnými hodnotami (od 0) Jedna n-tice může obsahovat položky libovolných typů S n-ticemi lze operovat pomocí vestavěných funkcí, nebo matematických operátorů N-tice lze převádět na seznamy pomocí funkce list() Prvky n-tic se píší do kulatých závorek (jsou oddělovány čárkou), indexy se píší do hranatých závorek.
Příklady práce s n-ticemi >>> x = ('a', 'b', 'c') >>> x ('a', 'b', 'c') >>> x[2] 'c' >>> x[1:] ('b', 'c') >>> len(x) 3 >>> max(x) 'c' >>> 2 * x ('a', 'b', 'c', 'a', 'b', 'c') >>> 5 in x 0 >>> x[2] = 'd' Traceback (innermost least): File "<stdin>" line 1, in? TypeError: object doesn't support item assignment
Jednoprvkové N-tice Jednoprvkové n-tice musí být vždy zakončeny čárkou U N-tic tvořených aritmetickým výrazem by nebylo možné rozeznat, zadá má být výsledkem n-tice, nebo hodnota >>> x = 3 >>> y = 4 >>> (x + y) # sečte hodnoty proměnných x a y 7 >>> (x + y,) # čárka značí, že se jedná o n-tici (7,)
Skládání a rozklad N-tic N-tice lze využít k vícenásobné inicializaci proměnných Inicializace proměnných: >>> (jedna, dve) = (1, 2) >>> jedna 1 >>> dve 2 >>> x = (jedna, dve) = (1, 2) >>> x (1, 2) >>> jedna 1 >>> x[1] 2 >>> jedna, dve = 1, 2 >>> dve 2
Skládání a rozklad N-tic N-tice lze skládat z jiných n-tic (platí i pro seznamy) Skládání n-tic: >>> [a, b] = [1, 2] >>> [c, d] = 3, 4 >>> (e, f, g) = 5, 6, 7 >>> a 1 >>> [b, c, d] [2, 3, 4] >>> (e, f, g) (5, 6, 7) >>> a, b, c (1, 2, 3)
Interní datové typy Slovníky Datová struktura odpovídající svou funkcionalitou asociativním polím, nebo hashovaným tabulkám Používají se např. pro vyhledávání položek označených složitými klíči Další vlastnosti: Prvky ve slovníku jsou indexovány celočíselnými hodnotami, řetězci, nebo jinými objekty Pythonu Jeden slovník může obsahovat prvky libovolných typů Jednu položku slovníku tvoří klíč a hodnota Se slovníky lze operovat pomocí vestavěných funkcí, atributů, nebo matematických operátorů Položky slovníků se píší do složených závorek (jsou oddělovány čárkou), klíč je od prvku oddělen dvojtečkou.
Příklady práce se slovníky 1/2 >>> cz2eng = {} # nový prázdný slovník >>> cz2eng['červená'] = 'red' # postupné naplnění položek >>> cz2eng['modrá'] = 'blue' >>> cz2eng['zelená'] = 'green' >>> cz2eng['červená'] 'red' >>> a = {'key1' : 1, 'key2' : 2 } # nový naplněný slovník >>> a['key1'] 1 >>> len(a) 2 >>> a.keys() ['key1', 'key2'] >>> a.values() [1, 2] >>> a.items() [('key1', 1), ('key2', 2)]
Příklady práce se slovníky 2/2 >>> a = {'key1' : 1, 'key2' : 2 } # nový naplněný slovník >>> a.has_key('key1') True >>> del a['key1'] >>> a.has_key('key1') False >>> a.get('key1', 'Klíč neexistuje') 'Klíč neexistuje' >>> a.get('key2', 'Klíč neexistuje') 2
Interní datové typy - Řetězce Python obsahuje silnou podporu pro práci s řetězci Řetězce lze vymezit pomocí: Uvozovek: Hello World. Součástí textu mohou být i jednoduché uvozovky (apostrofy) Jednoduchých uvozovek (apostrofů): Hello World. Součástí textu mohou být i klasické uvozovky. Trojitých uvozovek: Hello World. Součástí textu mohou být i nové řádky. Zároveň se používá jako dokumentační řetězec na začátku modulu, nebo funkce. S řetězci lze operovat pomocí vestavěných funkcí, nebo matematických operátorů in, +, *, len(), max(), min() S řetězci lez pracovat stejně jako se seznamy (lze indexovat znaky, provádět řezy, ) Řetězce jsou stejně jako n-tice neměnné. Řetězce lze převádět na seznamy (list())nebo n-tice (tuple()). Pro práci s řetězci existují speciální moduly string a re
Funkce pro práci s řetězci S řetězci lze pracovat pomocí velkého množství zabudovaných funkcí (atributů) Např. center(), ljust(), rjust(), count(), strip(), split(), join(), replace(), atof(), atoi(), Stejně jako u jiných jazyků i v Pythonu existují speciální řídící znaky Escape sekvence Představuje znak \' jednoduché uvozovky \" dvojité uvozovky \\ zpětné lomítko \a znak "zvonek" \b o jeden znak zpět (backspace) \f posuv papíru (nová stránka) \n nový řádek \r návrat vozíku \t tabulátor \v svislý tabulátor
Příklady práce s řetězci Interní funkce řetězce: >>> s = 'Hello World!' >>> s.split() ['Hello', 'World'] >>> list(s) ['H', 'e', 'l', 'l', 'o', '', 'W', 'o', 'r', 'l', 'd'] >>> s.rjust(20) # existují i obdobné funkce ljust() a center() ' Hello World' >>> s.count('l') 3 Funkce modulu string: >>> import string >>> s = 'Hello World' >>> string.split(s) ['Hello', 'World'] >>> z = string.join(["ahoj", "Svete"], "::") >>> z 'Ahoj::Svete' >>> string.replace(z, "::", " ") 'Ahoj Svete' >>> string.find(s, 'l') # existují i varianty lfind() a rfind() 2 >>> string.find(s, 'a') -1
Převod objektů na řetězce Na řetězec lze převést cokoliv Formální řetězcová reprezentace: repr(), `` Technicky zaměřený popis objektu Neformální řetězcová reprezentace: str() Textová informace určená pro uživatele >>> x = (1, 2) >>> repr(x) '(1, 2)' >>> `x` '(1, 2)' >>> str(x) '(1, 2)' >>> repr(len) '<built-in funcion len>'
Formátování řetězců Řetězce lze formátovat podobně jako v jazyce C/C++ Pro náhradu formátovacích sekvencí za příslušné hodnoty slouží operátor % >>> "%s. den v týdnu je %s" % (1, 'pondělí') '1. den v týdnu je pondělí' >>> "Pi je <%6.2f>" % 3.14159267 'Pi je < 3.14>' >>> "Pi je <%-6.2f>" % 3.14159267 'Pi je <3.14 >' >>> dict = {'e' : 2.718, 'pi': 3.14159267} >>> "%(pi).2f -> %(pi).4f -> %(e).2f" % dict '3.14 -> 3.1416 -> 2.718'
Řízení toku programu
Cyklus while Základní programový cyklus pythonu sestávající s podmínky, těla a nepovinného pokračování kódu. V těle cyklu lze volat příkazy break a continue break ukončí vykonávání cyklu continue započne vykonávání další iterace while podmínka: # tělo kódu else: # nepovinné pokračování kódu >>> i = 0 >>> while i < 10:... print i,... i = i + 1... else:... print 'konec'... 1 2 3 4 5 6 7 8 9 konec
Konstrukce if-elif-else Rozhodovací konstrukce může obsahovat: Jeden výskyt klíčového slova if Následně libovolný počet klíčových slov elif Dle potřeby může být zakončena klíčovým slovem else if podmínka 1: # tělo kódu 1 elif podmínka 2: # tělo kódu 2 elif podmínka 3: # tělo kódu 3 else: # tělo kódu 4 >>> if (i > 0) and (i < 10):... print 'ahoj'... elif (i >= 10) and (i < 20):... print 'nazdar'... else:... print 'cau'
Cyklus for Na rozdíl od jazyka C/C++ příkaz for netestuje podmínku, ale pracuje s danou posloupností (seznam, řetězec, ) Příkaz for se velmi často používá s funkcí range(from, to, step) nebo xrange(from, to, step) Funkce range(from, to, step) vytváří seznam celočíselných hodnot v rozsahu od from do to (poslední hodnota není v seznamu zahrnuta) s celočíselným krokem step (hodnota step může být kladná pro vzestupné seznamy a záporná pro sestupné seznamy) Funkce xtange(from, to, step) se chová stejně jako range(), ale pythonovský seznam nevytváří; pouze funkci for dodává jeho pomyslné položky (šetří tím paměť) for proměnná in posloupnost: # tělo programu else: # nepovinné pokračování kódu
Příklady práce s cyklem for >>> x = [1, 3, 5, 7, 9] >>> for i in x:... print i,... 1 3 5 7 9 >>> for i in range(1, 10, 2):... print i,... 1 3 5 7 9 >>> for i in range(10, 1, -2):... print i,... 9 7 5 3 1 >>> for i in 'Ahoj':... print i,... A h o j
Logické operátory U podmínkových výrazu lze složitější podmínky vytvářet pomocí následujících logických operátorů: < - menší > - větší <= - menší nebo roven >= - větší nebo roven == - roven!= - nerovnost <> - nerovnost and or not in - logický součin - logický součet - negace - je obsažen not in - není obsažen
Konzolový vstup a výstup
Výstup na konzolu Pro výstup na konzolu (terminál) slouží příkaz print Příkaz automaticky odřádkuje vytištěný obsah Chceme-li pokračovat ve výpisu na novém řádku, vložíme za příkaz print znak,(čárku) >>> s = "Ahoj světe" >>> s 'Ahoj sv\xd8te' >>> print s 'Ahoj světe' >>> for i in range(1,4):... print i... 1 2 3 >>> for i in range(1,4):... print i, # povšimněte si vložené čárky na konci řádku... 1 2 3
Vstup z konzole Pro vstup z konzole (terminálu) slouží příkazy raw_input() a input() Příkaz raw_input(message) čte libovolná data z aktuálního vstupu a vrací je ve formě textového řetězce Požadujeme-li vstup v jiném datovém formátu, můžeme výstup z funkce převést pomocí interního přetypování (např. int(raw_input())) Pokud nelze přetypování provést, bude vyvolána vyjímka Příkaz input(message) čte data z aktuálního vstupu a převádí je na konkrétní datový typ. Funkce je ekvivalentem výrazu eval(raw_input()) Funkce eval(src) vyhodnotí zdrojový výraz a vrátí příslušnou hodnotu Vkládání dat je ukončeno po stisku klávesy ENTER
Příklady zpracování vstupu z konzole Funkce raw_input(): >>> jmeno = raw_input('zadej jmeno: ') Zadej jmeno: Michal >>> jmeno 'Michal' >>> rok = int(raw_input('zadej rok: ')) Rok: 2007 >>> rok 2007 >>> poradi = int(raw_input('zadej poradi: ')) Zadej poradi: ahoj Traceback (most recent call last): File "<stdin> ", line 1, in <module> ValueError: Invalid literal for int() with base 10: 'ahoj' Funkce input(): >>> jmeno = input('zadej jmeno: ') Zadej jmeno: Michal >>> jmeno 'Michal' >>> rok = input('zadej rok: ') Zadej rok: 2007 >>> rok 2007
Funkce a procedury
Uživatelem definované funkce Základní syntaxe pro definici funkce nebo procedury je def jmeno(param1, param2, ): Funkce mohou vracet návratovou hodnotu pomocí příkazu return Není-li příkaz return v těle funkce použit, je návratová hodnota rovna None Funkce lze přiřazovat proměnným (vytvářet aliasy), nebo je vkládat např. do slovníků Parametry funkcí lze definovat explicitně, pomocí polí, nebo slovníků Lze definovat implicitní hodnoty parametrů Python umožňuje definovat tzv. Lambda funkce lambda param1, param2 : příkaz Velmi krátké a jednoduché funkce použitelné např. společně s filtry, nebo mapami. Funkce by měly jako první řádek/řádky obsahovat dokumentační řetězce. Tento text je pak dostupný prostřednictvím systémové proměnné doc jmeno. doc
Základní práce s funkcemi >>> def faktorial(n):... """ faktorial(n) -> Funkce pro vypocet faktorialu z... hodnoty n """... vysl = 1... for i in xrange(1, n+1):... vysl = vysl * i... return vysl... >>> faktorial(10) 3628800 >>> faktorial. doc ' faktorial(n) -> Funkce pro vypocet faktorialu z hodnoty n ' >>> f = faktorial >>> f(10) 3628800 >>> Funkce = {"FCT" : faktorial) >>> Funkce['FCT'](10) 3628800 >>> Funkce['FCT']. doc ' faktorial(n) -> Funkce pro vypocet faktorialu z hodnoty n '
Předávání parametrů Parametry lze funkcím předávat: U pevného počtu argumentů funkce: Hodnotami Jmény proměnných U proměnlivého počtu argumentů funkce: Pomocí seznamu Pomocí slovníku Parametry se předávají odkazem, takže u měnitelných datových typů se chovají jako reference na objekt v C++
Předávání parametrů Pevný počet argumentů funkce (s implicitními hodnotami): >>> def soucet(a = 0, b = 0):... """ soucet(n) -> Secte hodnoty a + b """... return a + b... >>> soucet(2, 3) 5 >>> soucet() 0 Proměnný počet argumentů funkce: >>> def soucet(*cisla):... souc = 0... for n in cisla:... souc = souc + n... return souc... >>> soucet(1, 2) 3 >>> soucet(1, 2, 3, 4, 5) 15 >>> def funkce(**args):... for key in args.keys():... print 'parametr %s ma hodnotu %s' % (key, args[key])... >>> funkce(a=1, b=2) parametr a ma hodnotu 1 parametr b ma hodnotu 2
Lokální a globální proměnné Každá proměnná je ve své oblasti viditelnosti implicitně definována jako lokální Globální proměnné musí být explicitně zpřístupněny pomocí klíčového slova global >>> a = 1 >>> b = 2 >>> def funkce():... global a... a = 3... b = 4... >>> a 1 >>> b 2 >>> funkce() >>> a 3 >>> b 2
Zajímavé zabudované funkce
Zajímavé zabudované funkce a symboly Symboly: name Řetězec představující jméno modulu (pro hlavní/spuštěný modul bude mít hodnotu main ) doc Dokumentační řetězec modulu/funkce/objektu/atributu Funkce: del() dir() Odstranění objektu/prvku Seznam jmen funkcí/proměnných/objektů a atributů definovaných v daném objektu nebo aktuální session eval() Vyhodnocení daného řetězce nebo objektu programového kódu jako výrazu Pythonu compile() Kompilace daného zdrojového textu jako programu jazyka Python (výstup lze použít jako argument funkce Eval()
Příklady použití funkcí eval, compile, a symbolu doc Vlastní interpreter jazyka Python: while True: cmd = raw_input("zadej vyraz/prikaz: ") if cmd == 'QUIT': # zadáním příkazu "QUIT" se skript ukončí break else: eval(compile(cmd, '', 'single')) # vyhodnoť a proveď příkaz print 'Koncim, nashle...' Prohlížeč nápovědy funkcí a modulů: while True: # zadej jméno objektu/modulu, pro který se vypíše nápověda module = raw_input('zadej jmeno dostupneho modulu/objektu: ') # vyhledej jména všech dostupných symbolů v daném modulu/objektu for f in dir(eval(module)): # získej objekt z jeho jména a vypiš jeho nápovědu print eval(module + '.' + f). doc
Aplikace v Pythonu Nějaké dotazy?