a clarification on the "global" statement sought

Chris Angelico rosuav at gmail.com
Fri Mar 11 04:29:47 EST 2016


On Fri, Mar 11, 2016 at 8:09 PM, Charles T. Smith
<cts.private.yahoo at gmail.com> wrote:
>   "Python deals with variables the other way around.
>    They are local, if not otherwise declared.
>    ...
>     def f():
>         print(s)
>     s = "I love Paris in the summer!"
>     f()
>     ...
>     As there is no local variable s, i.e. no assignment to s, the value
>     from the ***global*** variable s will be used."
>
> Indeed "maverick": that a variable can be an undefined global
> and then only appears as such when assigned to, has caused me
> no end of grief.

Looking purely at the function definition, you can see with 100%
certainty that it references two non-local names: "print" and "s".
Neither is assigned to within the function, so both are looked up
externally. At run time, s is resolved as a module-level name; print
is not, so Python looks further, to the builtins. Had s not been
assigned to, it would still be a global name in the function, but it
would fail to be found in either the module namespace or the builtins,
and would result in NameError. But either way, it's a global name,
whether it's assigned to or not.

ChrisA



More information about the Python-list mailing list