Search code examples
pythonrepresentation

Are repr and str always identical on Pythons builtin numeric types?


Are repr and str identical on Pythons built-in numeric types (int, bool, float, and complex), or are there (esoteric?) situations where the two may yield different results?

Related questions on SO (such as this one) focus on how __repr__ and __str__ may be implemented differently, and return different values for strings, but I can't find anything on the actual implementation on numbers.


Solution

  • Your primary source of information on this is http://hg.python.org/cpython/file/tip/Objects For example, in boolobject.c:

    PyTypeObject PyBool_Type = {
        ...stuff...
    
        bool_repr,                                  /* tp_repr */
    
        ...stuff...
    
        bool_repr,                                  /* tp_str */
    

    so yes, they're guaranteed to be the same.

    For floats, float_repr is different from float_str and depends on sys.float_repr_style.