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