Данный инструмент знаком большинству разработчиков на Python.
В тоже время, не так много людей подозревают о раширенных возможностях предоставляемых данной интерактивной оболочкой, пользуясь в основном автодополнением.
Статья построенна на выдержках из обширной, понятной и красивой документации ipython.github.com/ipython-doc/dev/interactive/index.html
Пропустим такие явные вещи, как автодополнение и история команд, сохраняемая мыжду вызовами.
Как видим, мы получаем достаточно подробную информацию о объекте, что может пригодиться при отладке. В наличии также специальные команды %pdoc, %pdef, %psource и %pfile, которые помогут нам увидеть документацию, определение функции, исходный код и полный код файла соответственно.
Пример вывода команды %pdef для json.dumps:
Используя данную команду мы имеем возможность выполнить любой python скрипт и получить доступ к всем его данным непосредственно в пространстве интерактивной оболочки.
Это черезвычайно полезно, когда мы разрабатываем некоторый модуль и хотим иметь возможность тестировать и манипулировать с его данными удобным способом.
Имеется некоторый набор ключей, позволяющих замерить время выполнения (-t), запустить с отладчиком (-d) или профайлером (-p).
Если необходимо освежить в памяти информацию о магических командах, предоставляемых IPython, всегда можно воспользоваться подсказкой (%run?).
При использовании IPython каждый ввод и вывод имеет метку.
Это радужно, так как мы можем обращаться с выводом без необходимости присваивать его конкретной переменной. Для этого мы используем синтаксис _номер_метки или же просто _, __ и ___, для обращения к 3 последним выводам:
Иногда вывод команд может быть очень большим, что замедляет работу и замусоривает консоль ненужной нам информацией.
Поставив точку с запятой в конце выражения, мы сообщаем о нашем категорическом нежелании видеть вывод результатов.
Существуют 2 команды, позволяющие просматривать и манипулировать историей введенных строк: %hist и %rep
Используя команды ! и !!, можно выполнять команды системной оболочки, такие как ls, cd и другие. Различие между командами в том, что первая просто выполняет системную команду, вторая же в добавок позволяет получить и спользовать вывод этих команд.
IPython умеет распознавать выражения, требующие нескольких строк, потому с этим нет особых проблем, но есть куда расти. Команда %edit сделает вашу жизнь лучше и позволит не избегать определений функций и классов прямо в интерактивной оболочке.
Введя команду %edit IPython откроет нам системный редактор, где мы сможем редактировать наш код, привычным способом.
Имеется возможность отрыть редактор с ранее введенным кодом, для этого служит команда %edit -p
Для обращения к ранее редактируемым кускам кода мы можем использовать синтаксис %edit _номер_вывода, в нашем случае это эквивалентно %edit _28.
Я просто оставлю это здесь:
Используя простую команды %time и %timeit мы имеем возможность замерять производительность отдельных кусков кода:
Еще раз напоминаю ссылку на документацию, ipython.github.com/ipython-doc/dev/interactive/index.html, где есть множество интересных возможностей, не освещенных в данной скудной статье.
В тоже время, не так много людей подозревают о раширенных возможностях предоставляемых данной интерактивной оболочкой, пользуясь в основном автодополнением.
Статья построенна на выдержках из обширной, понятной и красивой документации ipython.github.com/ipython-doc/dev/interactive/index.html
Пропустим такие явные вещи, как автодополнение и история команд, сохраняемая мыжду вызовами.
Обзор объектов
In [1]: import datetime
In [2]: datetime?
Type: module
Base Class: <type 'module'>
String Form: <module 'datetime' from '/usr/local/Cellar/python/2.7.1/lib/python2.7/lib-dynload/datetime.so'>
Namespace: Interactive
File: /usr/local/Cellar/python/2.7.1/lib/python2.7/lib-dynload/datetime.so
Docstring:
Fast implementation of the datetime type.
Как видим, мы получаем достаточно подробную информацию о объекте, что может пригодиться при отладке. В наличии также специальные команды %pdoc, %pdef, %psource и %pfile, которые помогут нам увидеть документацию, определение функции, исходный код и полный код файла соответственно.
Пример вывода команды %pdef для json.dumps:
In [8]: %pdef json.dumps
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, **kw)
Команда %run
Используя данную команду мы имеем возможность выполнить любой python скрипт и получить доступ к всем его данным непосредственно в пространстве интерактивной оболочки.
Это черезвычайно полезно, когда мы разрабатываем некоторый модуль и хотим иметь возможность тестировать и манипулировать с его данными удобным способом.
Имеется некоторый набор ключей, позволяющих замерить время выполнения (-t), запустить с отладчиком (-d) или профайлером (-p).
Если необходимо освежить в памяти информацию о магических командах, предоставляемых IPython, всегда можно воспользоваться подсказкой (%run?).
Кеширование результатов вывода
При использовании IPython каждый ввод и вывод имеет метку.
In [11]: a = 9
In [12]: a
Out[12]: 9
Это радужно, так как мы можем обращаться с выводом без необходимости присваивать его конкретной переменной. Для этого мы используем синтаксис _номер_метки или же просто _, __ и ___, для обращения к 3 последним выводам:
In [13]: _
Out[13]: 9
In [14]: _ + 8
Out[14]: 17
In [15]: _
Out[15]: 17
In [16]: _13
Out[16]: 9
Подавление вывода
Иногда вывод команд может быть очень большим, что замедляет работу и замусоривает консоль ненужной нам информацией.
In [21]: "*"*100500;
In [22]:
Поставив точку с запятой в конце выражения, мы сообщаем о нашем категорическом нежелании видеть вывод результатов.
История ввода
Существуют 2 команды, позволяющие просматривать и манипулировать историей введенных строк: %hist и %rep
In [22]: %hist
1 : import datetime
2 : import json
3: a = 9
4: a
In [23]: %rep 1
In [24]: import datetime<- курсор остановится на данной позиции и будет ожидать нашего ввода.
Вызов системных команд без выхода из оболочки
Используя команды ! и !!, можно выполнять команды системной оболочки, такие как ls, cd и другие. Различие между командами в том, что первая просто выполняет системную команду, вторая же в добавок позволяет получить и спользовать вывод этих команд.
In [26]: !ls
Archive Development Downloads Library Music Pictures VirtualBox VMs
Desktop Documents Dropbox Movies My Projects
In [27]: !!ls
Out[27]: SList (.p, .n, .l, .s, .grep(), .fields(), sort() available):
0: Archive
1: Desktop
2: Development
3: Documents
4: Downloads
5: Dropbox
6: Library
7: Movies
8: Music
9: My
10: Pictures
11: Projects
12: VirtualBox VMs
Многострочное редактирование
IPython умеет распознавать выражения, требующие нескольких строк, потому с этим нет особых проблем, но есть куда расти. Команда %edit сделает вашу жизнь лучше и позволит не избегать определений функций и классов прямо в интерактивной оболочке.
Введя команду %edit IPython откроет нам системный редактор, где мы сможем редактировать наш код, привычным способом.
In [28]: %edit
IPython will make a temporary file named: /var/folders/9Q/9Q8AwQvdEUubQ84MwFcKt++++TI/-Tmp-/ipython_edit_YPjrQx.py
Editing... done. Executing edited code...
Out[28]: 'def amicool():\n\treturn True\n'
In [29]: amicool()
Out[29]: True
In [30]:
Имеется возможность отрыть редактор с ранее введенным кодом, для этого служит команда %edit -p
Для обращения к ранее редактируемым кускам кода мы можем использовать синтаксис %edit _номер_вывода, в нашем случае это эквивалентно %edit _28.
Просмотр созданных идентификаторов
Я просто оставлю это здесь:
In [32]: %who
a amicool datetime json
In [33]: %whos
Variable Type Data/Info
--------------------------------
a int 9
amicool function <function amicool at 0x1014f2848>
datetime module <module 'datetime' from '<...>lib-dynload/datetime.so'>
json module <module 'json' from '/usr<...>on2.7/json/__init__.pyc'>
In [34]:
Замер времени выполнения кода
Используя простую команды %time и %timeit мы имеем возможность замерять производительность отдельных кусков кода:
In [45]: %timeit [1,2,3,4,5][2]
1000000 loops, best of 3: 236 ns per loop
In [46]: %timeit (1,2,3,4,5)[2]
10000000 loops, best of 3: 34.3 ns per loop
In [54]: %time [1,2,3,4,5][2]
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 0.00 s
Out[55]: 3
Еще раз напоминаю ссылку на документацию, ipython.github.com/ipython-doc/dev/interactive/index.html, где есть множество интересных возможностей, не освещенных в данной скудной статье.