Issue #7117 (backport py3k float repr) continued:

Add sys.float_repr_style attribute ('short' if short float
repr is in used;  'legacy' otherwise).
This commit is contained in:
Mark Dickinson 2009-10-24 14:01:08 +00:00
parent 99abd145dc
commit da8652d920
3 changed files with 24 additions and 0 deletions

View File

@ -332,6 +332,18 @@ always available.
.. versionadded:: 2.6 .. versionadded:: 2.6
.. data:: float_repr_style
A string indicating how the :func:`repr` function behaves for
floats. If the string has value ``'short'`` then for a finite
float ``x``, ``repr(x)`` aims to produce a short string with the
property that ``float(repr(x)) == x``. This is the usual behaviour
in Python 2.7 and later. Otherwise, ``float_repr_style`` has value
``'legacy'`` and ``repr(x)`` behaves in the same way as it did in
versions of Python prior to 2.7.
.. versionadded:: 2.7
.. function:: getcheckinterval() .. function:: getcheckinterval()

View File

@ -369,6 +369,8 @@ class SysModuleTest(unittest.TestCase):
self.assertEqual(vi[3], vi.releaselevel) self.assertEqual(vi[3], vi.releaselevel)
self.assertEqual(vi[4], vi.serial) self.assertEqual(vi[4], vi.serial)
self.assertTrue(vi > (1,0,0)) self.assertTrue(vi > (1,0,0))
self.assertIsInstance(sys.float_repr_style, str)
self.assertTrue(sys.float_repr_style in ('short', 'legacy'))
def test_43581(self): def test_43581(self):
# Can't use sys.stdout, as this is a cStringIO object when # Can't use sys.stdout, as this is a cStringIO object when

View File

@ -1056,6 +1056,7 @@ platform -- platform identifier\n\
executable -- pathname of this Python interpreter\n\ executable -- pathname of this Python interpreter\n\
prefix -- prefix used to find the Python library\n\ prefix -- prefix used to find the Python library\n\
exec_prefix -- prefix used to find the machine-specific Python library\n\ exec_prefix -- prefix used to find the machine-specific Python library\n\
float_repr_style -- string indicating the style of repr() output for floats\n\
" "
) )
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
@ -1498,6 +1499,15 @@ _PySys_Init(void)
FlagsType.tp_init = NULL; FlagsType.tp_init = NULL;
FlagsType.tp_new = NULL; FlagsType.tp_new = NULL;
/* float repr style: 0.03 (short) vs 0.029999999999999999 (legacy) */
#ifndef PY_NO_SHORT_FLOAT_REPR
SET_SYS_FROM_STRING("float_repr_style",
PyString_FromString("short"));
#else
SET_SYS_FROM_STRING("float_repr_style",
PyString_FromString("legacy"));
#endif
#undef SET_SYS_FROM_STRING #undef SET_SYS_FROM_STRING
if (PyErr_Occurred()) if (PyErr_Occurred())
return NULL; return NULL;