<html><body><p>---------- Původní zpráva ----------<br>Od: Petr Viktorin <encukou@gmail.com><br>Komu: Konference PyCZ <python@py.cz>, lisiak4@seznam.cz<br>Datum: 1. 1. 2015 22:15:15<br>Předmět: Re: [python] Jaký Tkinter? GTK? QT? Coooo Amiga Escape sekvence rulez! Odlehčení a dotaz - Python a pamět? ;)</p><br><blockquote>2015-01-01 17:47 GMT+01:00 Martin <lisiak4@seznam.cz>:<br>><br>> Nejdříve odlehčení. Poslední port Pythonu verze 2.3.3. Ukázka jednoduchého GUI pomocí ESCAPE sekvencí na počítači Amiga (Windows nemá přímou podporu ESCAPE sekvencí!)<br>><br>><br>><br>> https://www.youtube.com/watch?v=JzN1Fl-T7jw<br>><br>><br>><br>> A teď můj dotaz, stačí mi zodpovědět chování Pythonu verze 2.X v rámci PC.<br>><br>><br>><br>> Zkopíruji to co jsem se ptal jinde:<br>><br>><br>><br>> Takový technický dotaz, co se týče náročnosti na pamět. V rámci Pythonu, tedy v rámci skriptovacího jazyka. Je pamětově méně náročný, když definuji proměnnou za IF/ELIF? Nebo se tahle proměnná načte do paměti i když podmínka IF/ELIF nebude splněna? Na zápis použiji N-tici.<br>><br>> S IF/ELIF:<br>> if vstup == iso: tabulka = ("A","B"), ("B","C")<br>> elif vstup == latin2: tabulka = ("D","E"), ("F","G")<br>><br>> Bez IF/ELIF:<br>> iso = ("A","B"), ("B","C")<br>> latin2 = ("D","E"), ("F","G")<br>><br>> Můj odhad: asi se to načte do paměti i s konstrukcí IF/ELIF, ale program s konstrukcí IF/ELIF bude o něco méně pamětově náročný, protože nebudu definovat více proměnných ale jen jednu "tabulka" a možná ani to ne, protože pokud si to Python potřebuje zapamatovat vše naráz, tak bude mít v paměti nekolik krát proměnnou "tabulka", dle našeho příkladu 2 krát. Ale dost filozofie, programování je o nečem jiném, jak to tedy funguje?<br>><br>> Rěším to, protože každá tabulka by měla obsahovat něco kolem 1800 znaků.<br>><br>><br><br>Odpovím pro CPython, jiné interpretery jazyka Python se můžou chovat jinak :)<br><br>Konstantní literály, tedy konstanty zapsané přímo v kódu, jako třeba<br>(("A","B"), ("B","C")) výše, jsou součást zkompilovaného modulu, a do<br>paměti se načtou s ním. Je jedno, jestli se pak použijí nebo<br>nepoužijí. Proměnné v Pythonu jsou jen jména (pro C-čkaře: ukazatele),<br>která se přiřazují hodnotám.<br>Je možnost to dát do zvláštních modulů:<br><br>if vstup == 'iso':<br> from tabulka_iso import tabulka<br>elif vstup == 'latin2':<br> from tabulka_latin2 import tabulka<br><br>a v tomhle případě by se načetl jen daný modul a data v něm. Nebo<br>(většinou lepší varianta) se dají data dát do datového souboru a<br>přečíst pomocí `csv` nebo `json` ze std. knihovny.</blockquote><p> </p><p>Díky za odpověď a navedení! :) Uvidím, kolik si ty tabulky na Amize budou brát paměti a dle toho se zařídím :).</p><p> </p><p>Lisiak4</p></body></html>