Is vars() meant to include globals?

Hamish Lawson hamish_lawson at yahoo.co.uk
Fri Sep 15 04:56:57 EDT 2000


My understanding was that all variables known to a given scope would be
listed in vars(), effectively the union of globals() and locals().
However inside both SomeClass's __init__() and somefunc() in the
program below, vars() gives just the local variables. But the global
variable globalname is known in each case. Have I misunderstood about
vars()?

Hamish Lawson

-------------------------------------------------------------

globalname = "Bob"

class SomeClass:

    classvar = 3

    def __init__(self, param):
        localvar = 4
        print 'globals():', globals()
        print 'locals():', locals()
        print 'vars():', vars()
        print 'globalname:', globalname


def somefunc(param):
    localvar = 2
    print 'globals():', globals()
    print 'locals():', locals()
    print 'vars():', vars()
    print 'globalname:', globalname

SomeClass("Joe")
print
somefunc("Sue")

This gives:

globals(): {'globalname': 'Bob', '__doc__': None, 'somefunc': <function
somefunc at 78f210>, 'SomeClass': <class __main__.SomeClass at
78f1f0>, '__name__': '__main__', '__builtins__': <module '__builtin__'
(built-in)>}
locals(): {'self': <__main__.SomeClass instance at
78f230>, 'param': 'Joe', 'localvar': 4}
vars(): {'param': 'Joe', 'self': <__main__.SomeClass instance at
78f230>, 'localvar': 4}
globalname: Bob

globals(): {'globalname': 'Bob', '__doc__': None, 'somefunc': <function
somefunc at 78f210>, 'SomeClass': <class __main__.SomeClass at
78f1f0>, '__name__': '__main__', '__builtins__': <module '__builtin__'
(built-in)>}
locals(): {'param': 'Sue', 'localvar': 2}
vars(): {'param': 'Sue', 'localvar': 2}
globalname: Bob



Sent via Deja.com http://www.deja.com/
Before you buy.



More information about the Python-list mailing list