> what's the type signature of `print()` then?
Dynamic typing doesn't rule out polymorphism.
void print(PyObject objects...)
where `PyObject` is a base type.Additionally, you could perfectly well have constants, or require variables to have a fixed type, in a dynamic language. You would just pay a cost at runtime to check the type on assignment.