Руководство по команде import this в Python

Раздел: Основы Python -> Синтаксис и команды

Команда вывода философии Python

Философия Python, известная как «Дзен Python» (Zen of Python), представляет собой набор из 19 принципов, отражающих идеологию языка. Чтобы познакомиться с ними, в интерпретаторе или скрипте используется специальная команда. Рассмотрим разные способы её вызова.

Как вывести философию Python в интерактивной среде?

Самый простой и распространённый вариант – выполнить в интерпретаторе команду import this. При импорте модуля this его побочным эффектом является вывод текста «Дзен Python» на экран.

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
...

по какой команде выдается философия python (команда для вывода философии python)

Возможная проблема: Если модуль this отсутствует в системе (например, кастомная сборка Python), возникнет ошибка ModuleNotFoundError. В стандартной поставке Python модуль всегда присутствует. Если ошибка появляется, стоит переустановить интерпретатор или проверить путь sys.path.

Как получить текст философии без вывода на экран при импорте?

Модуль this содержит не только побочный эффект, но и строку с текстом в атрибуте s. После импорта можно обратиться к this.s, чтобы использовать его в коде.

>>> import this
>>> len(this.s)
858
>>> print(this.s[:50])
The Zen of Python, by Tim Peters

Нюанс: Атрибут s не документирован официально, но присутствует в реализации. В будущих версиях Python его существование не гарантируется.

Как прочитать философию Python из исходного файла модуля?

Модуль this.py можно найти в директории Lib установки Python. Открыв его как обычный файл, можно извлечь ту же строку.

import sys, os

this_path = os.path.join(sys.prefix, 'Lib', 'this.py')
with open(this_path, encoding='utf-8') as f:
    content = f.read()
# Обрезаем служебный код, оставляем только текст Zen
zen_start = content.find('"""')
zen_end = content.find('"""', zen_start + 3)
zen_text = content[zen_start+3:zen_end]
print(zen_text[:100])

Проблема пути: Расположение файла может отличаться в виртуальных окружениях. Рекомендуется использовать __file__ самого модуля: import this; import os; os.path.dirname(this.__file__) – но this.__file__ может быть None для встроенных модулей. Взаимодействие через атрибут s надёжнее.

Как вывести философию, не используя команду import?

Можно воспользоваться утилитой pydoc в командной строке: python -m pydoc this. Это покажет документацию модуля, который при открытии выводит свой текст.

$ python -m pydoc this
Help on module this:

NAME
    this - Zen of Python

DESCRIPTION
    ...

Однако полный текст «Дзен» появится только при непосредственном импорте или вызове pydoc this с флагом -b не даёт вывода. Альтернатива – python -c "import this".

$ python -c "import this"
The Zen of Python, by Tim Peters
...

При использовании python -c убедитесь, что текущая среда (виртуальное окружение) не мешает импорту.

Расширенные примеры и нестандартные приёмы

Пример 1. Получение каждого принципа по одному

Можно разбить строку this.s на строки и выводить их с задержкой.

Пример
import this
import time

lines = this.s.strip().split('\n')
for line in lines:
    print(line)
    time.sleep(0.3)
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
... (с паузой 0.3 сек)

Пример 2. Вывод философии намеренно только после определённого условия

Импорт модуля this всегда вызывает побочный эффект. Чтобы отложить вывод, можно сохранить текст в переменную и вывести его позже.

Пример
import sys

# временно подавляем вывод
old_stdout = sys.stdout
sys.stdout = None
import this
sys.stdout = old_stdout

# теперь используем сохранённый текст
print('Философия Python:')
print(this.s)
Философия Python:
The Zen of Python, by Tim Peters
...
Подавление вывода через sys.stdout может приводить к потере других данных, выводимых во время импорта. Лучше использовать io.StringIO.

Пример 3. Извлечение текста без импорта, через чтение встроенного файла

Модуль this физически находится в папке lib, но в некоторых дистрибутивах (например, embedded Python) файл может отсутствовать. Надёжный метод – воспользоваться стандартной библиотекой importlib.resources.

Пример
import importlib.resources as res
import this

# Получаем содержимое модуля как текст (работает в Python 3.7+)
text = res.read_text(this.__package__ or 'this', 'this.py')
# Извлекаем строку между тройными кавычками
import re
match = re.search(r'"""(.*?)"""', text, re.DOTALL)
if match:
    print(match.group(1)[:200])
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...

Пример 4. Вывод философии в другом порядке (перемешанные строки)

Пример
import this
import random

lines = [l for l in this.s.split('\n') if l.strip()]
random.shuffle(lines)
for line in lines:
    print(line)
Namespaces are one honking great idea -- let's do more of those!
Beautiful is better than ugly.
...

Пример 5. Использование философии в качестве подписи к программе

Пример
def show_zen():
    import this
    return this.s

if __name__ == '__main__':
    print('Есть только один способ сделать это:')
    print(show_zen()[:50])
Есть только один способ сделать это:
The Zen of Python, by Tim Peters

Пример 6. Команда python -m this (на самом деле не работает)

Ошибка: Запуск python -m this приведёт к ошибке, так как модуль this не имеет блока if __name__ == '__main__'. Для корректного вызова используется python -c "import this" или pydoc this.

Пример
$ python -m this
/usr/bin/python: No module named this.__main__; 'this' is a package and cannot be directly executed

Пример 7. Вывод философии с помощью оператора walrus (Python 3.8+)

Пример
if (zen := __import__('this').s):
    print(zen[:100])
The Zen of Python, by Tim Peters

Beautif…

Примечание: __import__ выполняет импорт, вызывая побочный эффект, но результат присваивается переменной zen.

Команда для вывода философии Python - comments

En
по какой команде выдается философия python (python)