Ответив на подобный вопрос ранее, я вставлю здесь соответствующие биты:
Чтобы помочь найти вещи в текущем пространстве имен, посмотрите pprintбиблиотека , встроенная директория , встроенная локальная система , и встроенная глобальная переменная .
Обратите вниманиечто функции не имеют каких-либо переменных до момента их фактического запуска. См. ответ Дж. Бернардо, чтобы узнать о переменных внутри скомпилированных функций.Например:
>>> def test():
... i = 5
...
>>> locals()
{'argparse': <module 'argparse' from 'c:\python27\lib\argparse.pyc'>, '__builtins__': <module '
__builtin__' (built-in)>, '__package__': None, 'i': 5, 'test': <function test at 0x02C929F0>, '
__name__': '__main__', '__doc__': None}
>>> dir(test)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__',
'__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__',
'__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'fu
nc_dict', 'func_doc', 'func_globals', 'func_name']
>>>
Посмотрите, как тестовая функция расположена в локальном пространстве имен.Я вызвал dir()
, чтобы увидеть интересное содержимое, а переменная i
не указана.Сравните это с объявлением класса и созданием объекта:
>>> class test():
... def __init__(self):
... self.i = 5
...
>>> s = test()
>>> locals()
{'argparse': <module 'argparse' from 'c:\python27\lib\argparse.pyc'>, '__builtins__': <module '
__builtin__' (built-in)>, '__package__': None, 'i': 5, 's': <__main__.test instance at 0x02CE45
08>, 'test': <class __main__.test at 0x02C86F48>, '__name__': '__main__', '__doc__': None}
>>> dir(s)
['__doc__', '__init__', '__module__', 'i']
>>>
Наконец, обратите внимание, как это не говорит, являются ли эти элементы переменными, константами, функциями или даже классами, объявленными внутри класса!Используйте на свой страх и риск.