Zdravím, chtěl bych zde uvést nový projekt "PyFormat", který zpřístupňuje třídu boost::format z balíku C++ knihoven Boost.org. Pokud někdo používáte Boost, jistě znáte i boost::format.
Modul PyFormat funguje pro Python 2.x a 3.x a podporuje byte stringy i unicode stringy. Mezi killer feature patří fakt, že formátovací string je syntakticky validován a zkompilován během inicializace a ne až při vyhodnocení, kdy už může být pozdě. Dále je třeba zmínit, že format objekt lze hodnotami plnit postupně a ne nutně najednou. (operátor % vrací self) Pomocí bitmasky lze konfigurovat, které chyby budou raisnuty a které ignorovány (např. nesprávný počet argumentů). Nevýhoda je, že boost::format je relativně pomalý, takže se nedivte, pokud budou výsledky horší než u nativního formátování v pythonu. Ale cíl projektu není překonat nativní formátování co do rychlosti, ale co do features a robustnosti a poskytnout kompatibilní vrstvu pro další projekt, který má boost::format na vstupu-ale o tom zas jindy. Třídy v modulu: ---------------- Format: bytestringy, Python2: __str__, Python3: __bytes__ UFormat: unicode stringy, Python2: __unicode__, Python3: __str__ Základy použití modulu: --------------------------- >>> from pyformat import Format as F, UFormat as U >>> fmt = U('%s %s %s') >>> print(fmt % 'a' % 'b' % 'c') a b c >>> print(fmt % 1 % 2 % 3) 1 2 3 Klonování: --------------- from pyformat import Format as F, UFormat as U tmpl = U('foo %s') # parsed only once def foo(i): fmt = tmpl.clone() # clone parsed object (copy.copy() also works) print(fmt % i) foo(1) foo(2) foo(3) Prohození: ------------- >>> fmt1, fmt2 = U('first'), U('second') >>> fmt1.swap(fmt2) Projekt včetně popisu dalších featur je ke stažení na https://github.com/pavelschon/PyFormat Budu rád za každý bug report a pull request. _______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz