Руководство по команде import this в 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.