Easy questions from a python beginner
John Posner
jjposner at optimum.net
Wed Jul 14 13:33:52 EDT 2010
On 7/14/2010 12:06 PM, Ethan Furman wrote:
> ... Have you tried this?
>
> --> def foo():
> ... print locals()
> ... blah = 'interesting'
> ... print locals()
> ...
> --> foo()
> {}
> {'blah': 'interesting'}
>
> As can be clearly seen, blah does not exist before the assignment -- the
> *name* blah has not been *bound* to an object yet, which is also what
> the error message says when you try to use it before it exists:
As already cited, according to Section 4.1 "Naming and binding" in the
Language Reference, the name "blah" *does* exist before the assignment.
That's the implication of this phrase:
If the name refers to a local variable that has not been bound,
(BTW, "has not been bound" should really be "is not currently bound", to
allow for use of *del* earlier in the block.)
Try this:
#--------------
def foo():
print "1. varnames:", globals()['foo'].__code__.co_varnames
print "2. locals:", locals()
blah = 'interesting'
print "3. locals:", locals()
foo()
#--------------
The output (Python 2.6.5) is:
1. varnames: ('blah',)
2. locals: {}
3. locals: {'blah': 'interesting'}
-John
More information about the Python-list
mailing list