Proof that Python doesn't have implicit declaration:
>>> foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
Pyhon's design sin is that it fails to distinguish the binding of a variable from assignment. The programmer cannot locally (i.e. just in that statement alone) express "I expect this statement to be freshly creating a variable, introducing it into the scope, with value 42" and "I expect to be assigning value 42 to a variable which already exists in the scope (or else this should be diagnosed)".An example of a language actually without declaration is Awk. This helps one-liners be very terse, but hinders large programs.
Proof that awk has implicit declaration in contrast to Python:
$ awk 'BEGIN { print foo }'
$
No errors. The shell has implicit declaration: $ echo $foo
You turn it off in serious scripts with "set -u" to have it diagnosed.