[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