There is a difference between functional, where functions are first class objects that can be created at run time at any scope in the code, vs pure functional where functions have no side effects.
Regarding the first case, think of C. You can pass around function pointers but all functions are instantiated at compile time and in the global scope; i.e. they are static objects. In Python, at difference, you can create instances of functions anywhere. To do that, the language needs to support the creation of closures.