Do union types actually exist in python?

Zeina Migeed picture Zeina Migeed · Aug 9, 2016 · Viewed 33.7k times · Source

Since python is dynamically typed, of course we can do something like this:

def f(x):
    return 2 if x else "s"

But is this the way python was actually intended to be used? Or in other words, do union types exist in the sense they do in Racket for example? Or do we only use them like this:

def f(x):
    if x:
        return "s"

where the only "union" we need is with None?

Answer

Martijn Pieters picture Martijn Pieters · Aug 9, 2016

Union typing is only needed when you have a statically typed language, as you need to declare that an object can return one of multiple types (in your case an int or str, or in the other example str or NoneType).

Python deals in objects only, so there is never a need to even consider 'union types'. Python functions return what they return, if the programmer wants to return different types for different results then that's their choice. The choice is then an architecture choice, and makes no difference to the Python interpreter (so there is nothing to 'benchmark' here).

Python 3.5 does introduce a standard for creating optional type hints, and that standard includes Union[...] and Optional[...] annotations. Type hinting adds optional static type checking outside of the runtime, the same way types in TypeScript are not part of the JavaScript runtime.