On Fri, Mar 11, 2016 at 8:09 PM, Charles T. Smith <cts.private.ya...@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 -- https://mail.python.org/mailman/listinfo/python-list