Pull to refresh

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

Reading time 5 min
Views 55K
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.
Tags:
Hubs:
+46
Comments 16
Comments Comments 16

Articles