Vlákno názorů k článku Nový chřestýš (1) od Mmm - Mozna jeste uzitecnejsi nez na velkych seznamech jsou...

  • Článek je starý, nové názory již nelze přidávat.
  • 12. 1. 2005 0:07

    Mmm (neregistrovaný)

    Mozna jeste uzitecnejsi nez na velkych seznamech jsou strucne generatory na iteratorech, co generuji svoje prvky za behu (typicky generatory).

    Uvazte priklad:
    lines = (line for line in file if line[0]!="#")

    Soubor muze mit klidne 2 GB radku nezacinajicich # a kdyz se lines posle treba nejake funkci ke zpracovani, tak to bude fungovat. Kdyby tam byly hranate zavorky, tak se to ony 2 GB bude snazit naladovat do pameti a pravdepodobne skonci neuspechem.

    Stejneho efektu lze ve starsich kobrach (ci v cem? :-)) dosahnout jen vytvorenim celeho generatoru:

    def good_lines(f):
    __for line in f:
    ____if line[0]!="#": yield line

    ...

    lines = good_lines(file)

    Myslim, ze strucne generatory jsou o neco prehlednejsi.

    (ty _ jsou tam misto mezer kvuli odsazeni)

  • 17. 1. 2005 20:40

    JP (neregistrovaný)

    Jenom menší doplnění - v novějších verzích Pythonu (od verze 2.2?) stačí použít for line in f:, efekt je stejný. Není třeba psát generátor, tato konstrukce iteruje soubor po řádkách a do paměti se žádný seznam neukládá.