[python] SQLite - forma selectovaných dat
superman
feed na centrum.cz
Sobota Leden 6 23:23:09 CET 2007
> JInak, proc pouzivate for i in range(len(a)): ? Uz jsem si toho
> vsimnul driv, u jinych prispevku. Preci, kdyz chci iterovat pres
> prvky, tak musi staci for item in a:
Protože:
1) Zvyk z jiných jazyků.
2) Protože taková iterace je read only. Já můžu dát for item in a, ale
už nezměním ten konkrétní prvek přímo v poli. Třeba jako v tomto případě
výsledné pole má stejný počet prvků, jen tuple se má změnit na seznam.
Vycházím z toho (možná mylně), že cokoli jiného, než iterace přes indexy
lze zařídit jedině tak, že budu mít v paměti dvě pole, první budu číst
iterací, do druhé budu vytvářet výsledek. Zatímco při iteraci přes
indexy mám jen jedno pole, nad kterým se čte i zapisuje - je to paměťově
efektivnější.
Existuje možnost jak to udělat bez indexování a bez toho, aby v paměti
byly dočasně dvě pole?
> Indexace je zvyk z C, PHP, Pascalu apod., kde to byla nutnost.
V PHP existuje stejná iterace, dokonce si tam můžete udělat i vlastní
iterátor, čehož jsem hojně využíval ve svých třídách a objektech. Ale v
PHP je iterátor dvojí, jeden read only jako v Pythonu a druhý s možností
změnit prvek pole, a ten mi v Pythonu chybí (a nebo o něm nevím):
Následující kód v PHP docela elegantně iterací přičte ke každému prvku
pole trojku, aniž by se musela vytvářet kopie pole:
$a = array(1,2,3,4,5);
foreach ($a as &$value)
$value += 3;
V C++ také existuje iterace, dokonce s možností projet jen část prvků
daných iterátorem:
std::for_each(objekt.begin(), objekt.end(), do_for_every_item);
Ing. Miloslav Ponkrác
Další informace o konferenci Python