Skip to main content

fstring427

Python 3.6 f-string sympathy (partial compatibility) module for Python 2.7 See https://www.python.org/dev/peps/pep-0498/ for the specification for Literal String Interpolation.

Example from PEP-0498

>>> import datetime
>>> name = 'Fred'
>>> age = 50
>>> anniversary = datetime.date(1991, 10, 12)
>>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.'
'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.'
>>> f'He said his name is {name!r}.'
"He said his name is 'Fred'."

Sympathetic output from fstring427

>>> from fstring427.fstring import Fmt as f
>>> import datetime
>>> name = 'Fred'
>>> age = 50
>>> anniversary = datetime.date(1991,10,12)
>>> str(f('My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.'))
'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.'
>>>  f('He said his name is {name!r}')()
"He said his name is 'Fred'"

Note the major differences:

  • f is a class, not a string type

  • f() evaluates the string

  • str() of a instance of f also evaluates the string

The underlying implementation is a subclass of the Python 2.7 Format class, and depends on internals. Obviously fragile and probably non-portable, but still serves my purpose.

## printf(), a convenience function

>>> printf('He said his name is {name!r}') He said his name is 'Fred'

which has the additional convenience of a temporary scope for kwargs

 >>> printf('He said his name is {name!r}', name="Sam")
He said his name is 'Sam'

Major incompatibilities

Python 3.6 f-strings were carefully designed, and cover edge cases that .format() does not, see https://mail.python.org/pipermail/python-ideas/2015-July/034726.html

fstring427 was implemented on top of .format() and shares the underlying implementation of lookups. If .format() can’t handle a {field}, fstring427 will evaluate field as a Python expression in the proper scope. In practice this means that:

a = 10
d = {'a': 'string', 10: 'int'}
printf("{d[a]")

prints string (Python 2.7 .format() behavior) instead of int (Python 3.6 f-string behavior). I’ve found this a small price to pay in my 2.7 code to get cleaner printing and string formatting.

Roadmap

  • Add printf() style logging module

  • Contemplate 2-3 port for printf() utility function (dealing with the kwargs scope)

Copyright 2017, Smartvid.io

Metadata

Release files for fstring427 0.9.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fstring427 0.9.9
File Size Uploaded
fstring427-0.9.9.tar.gz 3.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fstring427 0.9.9
File Interpreter ABI Platform
fstring427-0.9.9-py2-none-any.whl Python 2 none any Details

Total release size: 10.3 kB

Release files / fstring427-0.9.9.tar.gz

Download URL fstring427-0.9.9.tar.gz
Size 3.6 kB
Tags Source
SHA-256 checksum
How to use checksums
fdea61a7c43742bec01189de1e739ccd4b4982b092f5ffdc79eb0d2c281885b6
BLAKE2b-256 checksum
How to use checksums
3af44a32385a4c8c3d379adfc98de81d1132094d007e412f89c31a16699e9b7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / fstring427-0.9.9-py2-none-any.whl

Download URL fstring427-0.9.9-py2-none-any.whl
Size 6.7 kB
Tags Python 2
SHA-256 checksum
How to use checksums
5fd65ddfb1fffa52932c65741f0523ac781aa1086ac988cbdea45eed8b8442bd
BLAKE2b-256 checksum
How to use checksums
c486dbafa4ce325e154d1f713b4336315055ec3ffd8f5ab0791d0782ef286f7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.9.9 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page