[python] PyFormat 0.1.0 released
Pavel Schön
pavel na schon.cz
Pátek Březen 31 13:34:19 CEST 2017
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.
Další informace o konferenci Python