Автор оригинала: Arpit Bhayani.
>>>
мы видим, когда запускается интерактивная оболочка Python, называется строкой приглашения. Обычно строка приглашения указывает на то, что интерактивная оболочка теперь готова принимать новые команды.
Python 2.7.10 (default, Feb 22 2019, 21:55:15) [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
Python имеет 2 строки запроса, одну первичную >>>
и одну вторичную ...
который мы обычно видим, когда единица выполнения (оператор) охватывает несколько строк, например: при определении функции
>>> def foo(a, b): ... return a + b ... >>>
Строки приглашения определяются в модуле sys как ps1 и ps2 , и, как и любой другой атрибут, мы можем изменить значения sys.ps1
и sys.ps2
, и изменения вступают в силу немедленно, и в результате приглашение, которое мы видим в оболочке, изменяется на новое значение.
>>> import sys >>> sys.ps1 = '::: ' :::
Из приведенного выше примера мы видим, что изменение значения sys.ps1
на :::
изменяет приглашение на :::
.
Поскольку интерактивная оболочка работает в терминале, мы можем раскрасить и отформатировать ее с помощью bash color format , как показано ниже
import sys sys.ps1 = "\033[1;33m>>>\033[0m " sys.ps2 = "\033[1;34m...\033[0m "
Приведенный выше фрагмент кода делает нашу основную строку запроса желтой, а вторичную строку запроса-синей. Вот как это выглядит
Динамические строки подсказок
В документации говорится, что если мы назначаем нестроковый объект ps1
или ps2
, то Python запрашивает, вызывая str()
на объекте каждый раз, когда отображается приглашение. Теперь мы создаем некоторое динамическое приглашение с сохранением состояния, определяя класс и переопределяя метод __str__
.
Ниже мы реализуем IPython like prompt, где номер инструкции выполнения хранится в члене строке
класса и увеличивается при каждом отображении основного запроса.
# -*- coding: utf-8 -*- import sys class IPythonPromptPS1(object): def __init__(self): self.line = 0 def __str__(self): self.line += 1 return "\033[92mIn [%d]:\033[0m " % (self.line) sys.ps1 = IPythonPromptPS1() sys.ps2 = " \033[91m...\033[0m "
Приведенный выше фрагмент кода делает запрос похожим на это
Мы не хотели бы запускать этот фрагмент кода каждый раз, когда мы запускаем оболочку, и поэтому мы используем переменную окружения PYTHONSTARTUP , которая содержит путь к читаемому файлу и выполняется до того, как первое приглашение отображается в интерактивном режиме.
Поэтому мы сбрасываем фрагмент кода в файл, скажем ipython.py
и экспорт PYTHONSTARTUP
как
export PYTHONSTARTUP="$HOME/ipython.py"
Теперь каждый раз, когда мы запускаем нашу интерактивную оболочку Python, она будет выполнять файл ipython.py
и установите необходимые строки приглашения.
Объединив все вышесказанное, я создал утилиту под названием py-prompts . Вот краткий обзор тем, которые содержатся в пакете.
Надеюсь, вы нашли эту статью интересной. Python, будучи исчерпывающе расширяемым языком, позволил нам очень легко изменять строки подсказок и творчески подходить к ним. Если у вас есть идея темы или вы уже персонализировали свою подсказку, поделитесь ею со мной @arpit_bhayani , я буду в восторге
Эта статья была первоначально опубликована на моем блог – Персонализируйте приглашение на python .
Статьи, которые могут вас заинтересовать:
- Псевдослучайные числа с использованием клеточных автоматов – Правило 30
- Функции перегрузки в Python
- Алгоритм изолирующего леса для обнаружения аномалий
- Все, что вам нужно знать о стеганографии изображений
- Как python реализует сверхдлинные целые числа?
Если вам понравилось то, что вы прочитали, подпишитесь на мою рассылку, получите сообщение прямо в свой почтовый ящик и дайте мне знать @arpit_bhayani .