skip to navigation
skip to content

say 1.0.2

Super-simple templated printing. E.g.: say("Hello, {whoever}!", indent=1)

Latest Version: 1.6.5

print, format, and %, evolved.

Q: It’s been forty years since C introduced printf() and the basic formatted printing of positional parameters. Isn’t it time for an upgrade?

A: Yes! ZOMG, yes!

say supplements or replaces Python’s print statement/function, format function/method, and % string interpolation operator with higher-level facilities:

  • Straightforward string formatting with DRY, Pythonic templates that piggyback the built in format() method, formatting syntax, and well-proven underlying engine.
  • A single output mechanism compatible with both Python 2.x and Python 3.x–dramatically more compatible than Python’s own print.
  • Indentation and wrapping (to help stucture output)
  • Convenience printing functions for horizontal rules (lines), titles, and vertical whitespace.
  • Convenient template/text aggregator objects for easily building, reading, and writing multi-line texts.


from say import say, fmt

x = 12
nums = list(range(4))

say("There are {x} things.")
say("Nums has {len(nums)} items: {nums}")


There are 12 things.
Nums has 4 items: [0, 1, 2, 3]

say is basically a simpler, nicer recasting of:

print "There are {} things.".format(x)
print "Nums has {} items: {}".format(len(nums), nums)

(NB in Python 2.6 one must number each of the {} placeholders–e.g. "Nums has {0} items: {1}"– in order to avoid a ValueError: zero length field name in format error. Python 2.7 and later assume the placeholders are sequential.)

The more items that are being printed, and the complicated the format invocation, the more valuable having it stated in-line becomes. Note that full expressions are are supported. They are evaluated in the context of the caller.

For this and much more, see the full documentation at Read the Docs.

File Type Py Version Uploaded on Size
say-1.0.2.tar.gz (md5) Source 2013-09-14 15KB (md5) Source 2013-09-14 20KB