Интерпретатор позволяет получать моментальный отклик на выполненные действия. Можно сказать, что интерпретатор работает как CLI (Command Line Interface) сетевых устройств: каждая команда будет выполняться сразу же после нажатия Enter. Однако есть исключение – более сложные объекты (например циклы или функции) выполняются только после двухкратного нажатия Enter. В предыдущем разделе, для проверки установки Python вызывался стандартный интерпретатор. Но, кроме него, есть и усовершенствованный интерпретатор, называющийся IPython ( IPython). IPython позволяет намного больше, чем стандартный интерпретатор, который вызывается по команде python. Несколько примеров (впрочем, возможности IPython намного шире):
Установить IPython можно с помощью pip (установка будет производиться в виртуальном окружении, если оно настроено):
pip install ipython
После этого, зайти в IPython можно следующим образом:
$ ipython Python 3.6.3 (default, Oct 9 2017, 11:46:27) Type 'copyright', 'credits' or 'license' for more information IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Для выхода используется команда quit. Далее описывается, как будет использоваться IPython.
Для знакомства с интерпретатором можно попробовать использовать его как калькулятор:
In [1]: 1 + 2 Out[1]: 3 In [2]: 22*45 Out[2]: 990 In [3]: 2**3 Out[3]: 8
В IPython ввод и вывод помечены:
Пример вывода строки функцией print():
In [4]: print('Hello!') Hello!
Когда в интерпретаторе создаётся, например, цикл, то внутри цикла приглашение меняется на троеточие. Для выполнения цикла и выхода из этого подрежима необходимо дважды нажать Enter:
In [5]: for i in range(5): ...: print(i) ...: 0 1 2 3 4
В IPython есть возможность посмотреть справку по произвольному объекту, функции или методу с помощью help():
In [1]: help(str) Help on class str in module builtins: class str(object) | str(object='') -> str | str(bytes_or_buffer[, encoding[, errors]]) -> str | | Create a new string object from the given object. If encoding or | errors is specified, then the object must expose a data buffer | that will be decoded using the given encoding and error handler. ... In [2]: help(str.strip) Help on method_descriptor: strip(...) S.strip([chars]) -> str Return a copy of the string S with leading and trailing whitespace removed. If chars is given and not None, remove characters in chars instead.
Второй вариант:
In [3]: ?str Init signature: str(self, /, *args, **kwargs) Docstring: str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'. Type: type In [4]: ?str.strip Docstring: S.strip([chars]) -> str Return a copy of the string S with leading and trailing whitespace removed. If chars is given and not None, remove characters in chars instead. Type: method_descriptor
print() позволяет вывести информацию на стандартный поток вывода (текущий экран терминала). Если необходимо вывести строку, то её нужно обязательно заключить в кавычки (двойные или одинарные). Если же нужно вывести, например, результат вычисления или просто число, то кавычки не нужны:
In [6]: print('Hello!') Hello! In [7]: print(5*5) 25
Если нужно вывести подряд несколько значений через пробел, то нужно перечислить их через запятую (подробнее о print() в ):
In [8]: print(1*5, 2*5, 3*5, 4*5) 5 10 15 20 In [9]: print('one', 'two', 'three') one two three
По умолчанию, в конце каждого выражения, переданного в print(), будет перевод строки. Если необходимо, чтобы после вывода каждого выражения не было бы перевода строки, надо в качестве последнего выражения в print() указать дополнительный аргумент end.
Например, такое выражение выведет строки "one" и "two" в разных строках:
In [10]: print('one'), print('two') one two Out[10]: (None, None)
Но если в print() указать параметр end равным пустой строке, результат будет таким:
In [11]: print('one', end=''), print('two') onetwo Out[11]: (None, None)
dir() может использоваться для того, чтобы посмотреть, какие имеются аттрибуты (переменные, привязанные к объекту) и методы (функции, привязанные к объекту).
Например, для числа вывод будет таким (обратите внимание на различные методы, которые позволяют делать арифметические операции):
In [10]: dir(5) Out[10]: ['__abs__', '__add__', '__and__', ... 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
Аналогично для строки:
In [11]: dir('hello') Out[11]: ['__add__', '__class__', '__contains__', ... 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
Если выполнить dir() без передачи значения, то она показывает существующие методы, аттрибуты и переменные, определённые в текущей сессии интерпретатора:
In [12]: dir() Out[12]: [ '__builtin__', '__builtins__', '__doc__', '__name__', '_dh', ... '_oh', '_sh', 'exit', 'get_ipython', 'i', 'quit']
Например после создания переменной a и test():
In [13]: a = 'hello' In [14]: def test(): ....: print('test') ....: In [15]: dir() Out[15]: ... 'a', 'exit', 'get_ipython', 'i', 'quit', 'test']