Вывод всех объявленных переменных в Python: решение

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы просмотреть все локальные переменные, используйте модуль pprint:

Python
Скопировать код
from pprint import pprint
pprint(locals())  # Выводит словарь с локальными переменными: просто и наглядно

Чтобы обратиться к глобальным переменным, используйте globals(). Их можно отфильтровать, исключив имена, начинающиеся на _. Помните, что pprint() — это ваш надежный инструмент для обеспечения четкого вывода.

Если вы работаете в среде IPython или Jupyter Notebook, команда %whos предоставит вам детализированный список переменных, а %who покажет их имена. Для сохранения переменных между сессиями используйте команду %store. Это похоже на сохранение игрового процесса перед большим боем.

Что это за типы у моих переменных?

Вы можете узнать типы переменных так:

Python
Скопировать код
for name in vars():
    if not name.startswith('_'):
        print(f"{name}: {type(eval(name))}")  # Теперь вы знаете типы переменных

Здесь с помощью eval() определяется тип каждой переменной, но помните о потенциальном риске использования eval().

Полезные рекомендации по исследованию переменных

Хранение переменных вне времени выполнения скрипта

Если вам нужно сохранить переменные на время, превышающее время выполнения скрипта, используйте модуль pickle вместе с командой %store в IPython:

Python
Скопировать код
import pickle

# Сохранение переменной 'data' в файл:
with open('data.pickle', 'wb') as f:
    pickle.dump(data, f)  # Переменная сохранена в файл.

# Загрузка 'data' из файла при повторном использовании:
with open('data.pickle', 'rb') as f:
    data = pickle.load(f)

Интроспекция состояния при выполнении вычислительных задач

IPython и Jupyter Notebooks позволяют более глубоко понять состояние ваших переменных благодаря команде %store. Дополнительные библиотеки могут расширить возможности управления состоянием переменных.

Расширенная инспекция объектов

Чтобы получить более полную информацию об объектах, применяйте следующий подход:

Python
Скопировать код
class MyClass:
    def __init__(self):
        self.x = 10
        self.y = 20

obj = MyClass()
pprint(vars(obj))  # Выводит информацию о переменных объекта

Функция vars() отображает содержимое атрибутов объекта.

Магические команды в Jupyter Notebooks

В Jupyter Notebooks доступны магические команды, такие как %who и %whos, которые позволяют увидеть все текущие переменные. При необходимости вы всегда можете обратиться к документации IPython.

Визуализация

Представьте ваш скрипт на Python как кухню, где переменные – это ингредиенты, а dir() — содержимое ваших шкафов. Давайте откроем двери:

Python
Скопировать код
for ingredient in dir():
    if not ingredient.startswith('_'):
        print(ingredient)  # Полный список доступных "ингредиентов"

Вот что у нас есть на полках:

Markdown
Скопировать код
| Ингредиент | Тип   |
|------------|-------|
| мука       | 🌾    |
| яйца       | 🥚    |
| сахар      | 🍚    |
| масло      | 🧈    |

Главное: функциия dir() помогает вам увидеть, что доступно в вашей "кухне".

Быстро, быстрее, наибыстрейший

Исключаем лишнее

Если вы хотите исключить из рассмотрения специальные методы и атрибуты (те, которые начинаются и заканчиваются двойным подчёркиванием), используйте следующий подход:

Python
Скопировать код
{key: value for key, value in globals().items() if not (key.startswith('__') and key.endswith('__'))}  # Только то, что нам нужно, без лишних подчеркиваний

Проверяем значение переменных

Хотите посмотреть, что содержат в себе ваши переменные? Вызовите функцию vars().values(), но будьте готовы к большому количеству информации:

Python
Скопировать код
for value in vars().values():
    print(value)  # Ожидайте обилия информации

Заглядываем в модули

Хотите узнать всё об определенном модуле или классе? Используйте функции dir() и vars() для поиска:

Python
Скопировать код
import math
pprint(dir(math))  # Все секреты модуля math

Полезные материалы

  1. Built-in Functions — Python 3.12.1 documentation
  2. Python Debugging With Pdb – Real Python
  3. Project Jupyter | Home
  4. Python locals() (With Examples)
  5. Python Scope & the LEGB Rule: Resolving Names in Your Code – Real Python
  6. dir() function in Python – GeeksforGeeks
  7. Online Python Tutor – visualize, debug, get AI help for Python, Java, C, C++, and JavaScript