One thing that is really important for this question (and the answers) is the following:
What the hell is functional programming, and what are the most important properties of it.
I'll try to give my view of it:
Functional programming is a lot like writing math on a whiteboard. When you write equations
on a whiteboard, you do not think about an execution order. There is (typically) no mutation.
You don't come back the day after and look at it, and when you make the calculations again,
you get a different result (or you may, if you've had some fresh coffee :)). Basically,
what is on the board is there, and the answer was already there when you started writing
things down, you just haven't realized what it is yet.
Functional programming is a lot like that; you don't change things, you just evaluate
the equation (or in this case, "program") and figure out what the answer is. The program
is still there, unmodified. The same with the data.
I would rank the following as the most important features of functional programming:
a) referential transparency - if you evaluate the same statement at some other time
and place, but with the same variable values, it will still mean the same.
b) no side effect - no matter how long you stare at the whiteboard, the equation another
guy is looking at at another whiteboard won't accidentally change.
c) functions are values too. which can be passed around and applied with, or to, other
variables.
d) function composition, you can do h=g·f and thus define a new function h(..) which is
equivalent to calling g(f(..)).
This list is in my prioritized order, so referential transparency is the most important,
followed by no side effects.
Now, if you go through python and check how well the language and libraries supports,
and guarantees, these aspects - then you are well on the way to answer your own question.