]> granicus.if.org Git - python/commitdiff
Issue #7117 (backport py3k float repr) continued:
authorMark Dickinson <dickinsm@gmail.com>
Sat, 24 Oct 2009 14:01:08 +0000 (14:01 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sat, 24 Oct 2009 14:01:08 +0000 (14:01 +0000)
Add sys.float_repr_style attribute ('short' if short float
repr is in used;  'legacy' otherwise).

Doc/library/sys.rst
Lib/test/test_sys.py
Python/sysmodule.c

index 8264a39a4af16952766c646ba27d5d141237895f..5a04f3991a2a0dfbba2133b3b02737890d9a0d4f 100644 (file)
@@ -332,6 +332,18 @@ always available.
 
    .. 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()
 
index 0e364af8dba0507084b82b9eae842cf1cb70e96f..1d0e2efc8333ab19dae428b01c47913504477982 100644 (file)
@@ -369,6 +369,8 @@ class SysModuleTest(unittest.TestCase):
         self.assertEqual(vi[3], vi.releaselevel)
         self.assertEqual(vi[4], vi.serial)
         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):
         # Can't use sys.stdout, as this is a cStringIO object when
index 86e0febf4d3c86dfaf4549f3272d0c5c8dbdc6f6..c9bc4a3d958d3fc5676b808437387ba32197a516 100644 (file)
@@ -1056,6 +1056,7 @@ platform -- platform identifier\n\
 executable -- pathname of this Python interpreter\n\
 prefix -- prefix used to find the 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
@@ -1498,6 +1499,15 @@ _PySys_Init(void)
        FlagsType.tp_init = 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
        if (PyErr_Occurred())
                return NULL;