IPython: замена стандартного Python shell

IPython: замена стандартного Python shell

Бэкендер

Python shell достаточно удобная вещь для тестирования и изучения возможностей языка, кто-то даже использует его в качестве калькулятора(что между прочим весьма удобно), в этом цикле статей я бы хотел рассказать о IPython — замене стандартного Python shell'а, который предоставляет расширенный список возможностей, что делает работу с ним более эффективной.



Скачать и установить IPython можно с официального сайта


Пространство имен


Запускаем IPython shell командой 'ipython', как и в в стандартном Python shell'е мы можем присваивать переменным значения:

In [1]: msgflag = 1


In [2]: pi = 3


In [3]: msg = "hello"


In [4]: warning = None


Во время ввода можно пользоваться автокомплитом, например набрав msg и нажав Tab, мы получим возможные варианты:

In [5]: msg

msg msgflag


Если вариант один, то он автоматически появится в поле ввода.


IPython предоставлять возможность использования пространств имен, например, команда 'who' выводит список доступных переменных:

In [5]: who

msg msgflag pi warning


Она имеет ряд опций, например, чтобы вывести переменные типа int, следует написать:

In [6]: who int

msgflag pi


Если требуется получить дополнительную информацию о переменных, можно воспользоваться командой 'whos':

In [7]: whos
Variable   Type        Data/Info
--------------------------------
msg        str         hello
msgflag    int         1
pi         int         3
warning    NoneType    None


Так же есть возможность поиска по имени переменной, для этого нужно использовать команду 'psearch':

In [8]: psearch msg*

msg

msgflag


Возможно расширить критерии поиска типом переменной, например:

In [9]: psearch msg* int

msgflag


Для того чтобы сохранить переменную в профайле(она будет доступна после перезапуска IPython) есть команда 'store':

In [10]: store msgflag

Stored 'msgflag' (int)


Так же есть возможность сохранить переменную в отдельный файл:

In [11]: store msgflag > /tmp/m.txt

Writing 'msgflag' (int) to file '/tmp/m.txt'.


Чтобы посмотреть сохраненные переменные, вводится команда 'store' без параметров:

In [12]: store

Stored variables and their in-db values:

msgflag -> 1


Чтобы очистить текущее пространство имен, воспользуемся командой 'reset' и убедимся, что оно очистилось при помощи команды 'who':

In [13]: reset

Once deleted, variables cannot be recovered. Proceed (y/[n])? y


In [14]: who

Interactive namespace is empty.


Можно восстановить переменные, которые были ранее сохранены при помощи команды 'store' и убедиться, что они восстановились командой 'who':

In [15]: store -r


In [16]: who

msgflag


Так же можно очистить все, что находится в store и при следующем старте пространство имен будет пустым:

In [17]: store -z


Логгирование


Другая полезная возможность IPython — логгирование. Команда 'logstate' проверяет текущее состояние логгера:

In [18]: logstate

Logging has not been activated.


Командой 'logstart' можно начать логгирование:

In [19]: logstart

Activating auto-logging. Current session state plus future input saved.

Filename : ipython_log.py

Mode : rotate

Output logging : False

Raw input log : False

Timestamping : False

State : active


Лог сохраняется в текущей директории как исходный код Python

Команды 'logon' и 'logoff' используются для включения/выключения логгирования:

In [20]: logoff

Switching logging OFF


In [21]: logon

Switching logging ON


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


Команды, описанные выше в терминологии IPython называются magic commands(магические команды). Для того, чтобы посмотреть полный список magic команд, нужно ввести 'lsmagic':

In [22]: lsmagic

Available magic functions:

%Exit %Pprint %Quit %alias %autocall %autoindent %automagic %bg %bookmark %cd %clear %color_info %colors %cpaste %debug %dhist %dirs %doctest_mode %ed %edit %env %exit %hist %history %logoff %logon %logstart %logstate %logstop %lsmagic %macro %magic %p %page %pdb %pdef %pdoc %pfile %pinfo %popd %profile %prun %psearch %psource %pushd %pwd %pycat %quickref %quit %r %rehash %rehashx %rep %reset %run %runlog %save %sc %store %sx %system_verbose %time %timeit %unalias %upgrade %who %who_ls %whos %xmode


Automagic is ON, % prefix NOT needed for magic functions.


Магические команды могут использовать знак процента в качестве префикса. Это полезно в случае, если имя переменной совпадает с именем команды.

Для вызова помощи по всем магическим командам используется 'magic' команда. Для получения справки по определенный магической команды достаточно просто поставить знак вопроса в конце:

In [23]: lsmagic?

Type: Magic function

Base Class: <type 'instancemethod'>

String Form: <bound method InteractiveShell.magic_lsmagic of <IPython.iplib.InteractiveShell object at 0x9e5ef0>>

Namespace: IPython internal

File: /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/Magic.py

Definition: lsmagic(self, parameter_s='')

Docstring:

List currently available magic functions.


Для получения дополнительной информации следует ввести 2 знака вопроса в конце команды, в таком случае выводится и исходный код команды-функции.


Для переменных определенных самостоятельно, можно так же использовать знак вопроса:

In [24]: msgflag?

Type: int

Base Class: <type 'int'>

String Form: 1

Namespace: Interactive

Docstring:

int(x[, base]) -> integer


Convert a string or number to an integer, if possible. A floating point

argument will be truncated towards zero ...


Некоторые «косметические» команды


Можно использовать 'p' как сокращение для 'print':

In [25]: import sys


In [26]: p sys.path

['', '/Library/Frameworks/Python.framework/Versions/2.5/bin', '/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', '/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/bdist_mpkg-0.4.3-py2.5.egg', '/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/macholib-1.1-py2.5.egg',

...



Так же можно пользоваться сокращенной формой для вызова функций:

In [27]: def x(a, b):

....: print a, b

....:

....:


In [28]: x 3, 4

-------> x(3, 4)

3 4



Для вызова функции можно сделать так:

In [29]: def x(): print "123"

....:


In [30]: /x

-------> x()

123



Можно вызвать функцию, которая в качестве параметров принимает строки, без необходимости заключать их в кавычки:

In [31]: def x(a,b): print "%s-%s" % (a, b)

....:


In [32]: , x astr bstr

-------> x("astr", "bstr")

astr-bstr


Интроспекция


Если вы забыли какие аргументы нужны для вызова функции или метода, вы всегда можете узнать это при помощи команды 'pdef':

In [37]: import re


In [38]: pdef re.match

re.match(pattern, string, flags=0)



Так же можно посмотреть документацию по этой функции:

In [39]: pdoc re.match

Class Docstring:

Try to apply the pattern at the start of the string, returning

a match object, or None if no match was found.

Calling Docstring:

x.__call__(...) <==> x(...)



Всю информацию о функции можно посмотреть при помощи команды 'pinfo':

In [40]: pinfo re.match

Type: function

Base Class: <type 'function'>

String Form: <function match at 0xaa2b70>

Namespace: Interactive

File: /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py

Definition: re.match(pattern, string, flags=0)

Docstring:

Try to apply the pattern at the start of the string, returning

a match object, or None if no match was found.



Вы так же можете посмотреть исходный код функции:

In [41]: psource re.match

def match(pattern, string, flags=0):

"""Try to apply the pattern at the start of the string, returning

a match object, or None if no match was found."""

return _compile(pattern, flags).match(string)



Если вы хотите посмотреть исходный код файла, в котором определен тот или иной объект, используйте команду 'pfile':

In [42]: pfile re.match



Так же можно запустить ваш любимый редактор для редактирования файла, в котором определен тот или иной объект:

In [43]: edit -x re.match

Editing...


Ссылки на источники


Скринкаст — http://showmedo.com/videos/video?name=1000010&fromSeriesID=100

Официальная документация — http://ipython.scipy.org/moin/Documentation


PS: На этом пока все, если эта тема кому-то интересна, то в следующих статьях продолжу описание возможностей IPython.


Источник: https://habr.com/ru/articles/49685/


Report Page