[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