I don't think I would call this functional. Python is decidedly not at all functional - there's no way to declare arbitrary functions inline, no chaining of map/filter etc.
But the static types are definitely welcome. I didn't know about the type keyword. Apparently it makes it support forward references.
You're still limited by lambda expressions though. And in general the language is still statement based, not expression based. You can't do a = if foo then x else y type things (except for the one-off and backwards x if foo else y; they were so close!).
It's not. In functional languages there's no special case like this. All if-elses are expressions. It's far superior. For example how do you do this with Python's if-else expression?
let x = if foo {
let y = bar();
baz();
y
} else {
z
}
foo isn't a function, it's a bool. But in any case, as you can see the answer is "with terrible hacks". Python is not a functional language. It is imperative.