Show More
python-ipython-diff.rst
240 lines
| 6.4 KiB
| text/x-rst
|
RstLexer
|
r21667 | ================= | ||
Python vs IPython | ||||
================= | ||||
|
r21662 | |||
|
r21667 | This document is meant to highlight the main differences between the Python | ||
|
r26380 | language and what are the specific constructs you can do only in IPython. | ||
|
r21662 | |||
|
r26380 | Unless expressed otherwise all of the constructs you will see here will raise a | ||
|
r21662 | ``SyntaxError`` if run in a pure Python shell, or if executing in a Python | ||
|
r22475 | script. | ||
|
r21662 | |||
|
r26380 | Each of these features is described more in detail in the further parts of the documentation. | ||
|
r21662 | |||
Quick overview: | ||||
=============== | ||||
|
r26380 | All the following constructs are valid IPython syntax: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: ? | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: ?object | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: object? | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: *pattern*? | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: %shell like --syntax | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: !ls | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r23867 | In [1]: my_files = !ls ~/ | ||
|
r26585 | In [1]: for i, file in enumerate(my_files): | ||
|
r21713 | ...: raw = !echo $file | ||
|
r26585 | ...: !echo {file[0].upper()} $raw | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: %%perl magic --function | ||
...: @months = ("July", "August", "September"); | ||||
...: print $months[0]; | ||||
|
r22475 | |||
|
r21662 | |||
|
r26380 | Each of these constructs is compiled by IPython into valid python code and will | ||
|
r26381 | do most of the time what you expect it will do. Let's see each of these examples | ||
|
r21662 | in more detail. | ||
Accessing help | ||||
============== | ||||
As IPython is mostly an interactive shell, the question mark is a simple | ||||
shortcut to get help. A question mark alone will bring up the IPython help: | ||||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r21713 | In [1]: ? | ||
|
r21662 | |||
IPython -- An enhanced Interactive Python | ||||
========================================= | ||||
IPython offers a combination of convenient shell features, special commands | ||||
and a history mechanism for both input (command history) and output (results | ||||
caching, similar to Mathematica). It is intended to be a fully compatible | ||||
replacement for the standard Python interpreter, while offering vastly | ||||
improved functionality and flexibility. | ||||
At your system command line, type 'ipython -h' to see the command line | ||||
options available. This document only describes interactive features. | ||||
MAIN FEATURES | ||||
------------- | ||||
... | ||||
|
r26380 | A single question mark before or after an object available in the current | ||
|
r26381 | namespace will show help relative to this object: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In [6]: object? | ||||
Docstring: The most base type | ||||
Type: type | ||||
A double question mark will try to pull out more information about the object, | ||||
|
r22475 | and if possible display the python source code of this object. | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In[1]: import collections | ||||
|
r24843 | In[2]: collections.Counter?? | ||
|
r21662 | |||
Init signature: collections.Counter(*args, **kwds) | ||||
Source: | ||||
class Counter(dict): | ||||
'''Dict subclass for counting hashable items. Sometimes called a bag | ||||
or multiset. Elements are stored as dictionary keys and their counts | ||||
are stored as dictionary values. | ||||
>>> c = Counter('abcdeabcdabcaba') # count elements from a string | ||||
>>> c.most_common(3) # three most common elements | ||||
[('a', 5), ('b', 4), ('c', 3)] | ||||
>>> sorted(c) # list all unique elements | ||||
['a', 'b', 'c', 'd', 'e'] | ||||
>>> ''.join(sorted(c.elements())) # list elements with repetitions | ||||
'aaaaabbbbcccdde' | ||||
... | ||||
|
r26381 | If you are looking for an object, the use of wildcards ``*`` in conjunction | ||
with a question mark will allow you to search the current namespace for objects with | ||||
|
r21667 | matching names: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | In [24]: *int*? | ||
FloatingPointError | ||||
int | ||||
Shell Assignment | ||||
================ | ||||
|
r26381 | When doing interactive computing it is a common need to access the underlying shell. | ||
|
r22475 | This is doable through the use of the exclamation mark ``!`` (or bang). | ||
|
r21662 | |||
|
r26380 | This allows to execute simple commands when present in beginning of the line: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In[1]: !pwd | ||||
/User/home/ | ||||
Change directory: | ||||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In[1]: !cd /var/etc | ||||
Or edit file: | ||||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In[1]: !mvim myfile.txt | ||||
|
r21667 | The line after the bang can call any program installed in the underlying | ||
|
r21662 | shell, and support variable expansion in the form of ``$variable`` or ``{variable}``. | ||
|
r26380 | The later form of expansion supports arbitrary python expressions: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In[1]: file = 'myfile.txt' | ||||
In[2]: !mv $file {file.upper()} | ||||
|
r26380 | The bang (``!``) can also be present on the right hand side of an assignment, just | ||
after the equal sign, or separated from it by a white space. In this case the | ||||
standard output of the command after the bang will be split out into lines | ||||
in a list-like object and assigned to the left hand side. | ||||
|
r21662 | |||
|
r26380 | This allows you, for example, to put the list of files of the current working directory in a variable: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r23867 | In[1]: my_files = !ls | ||
|
r21662 | |||
|
r26380 | You can combine the different possibilities in for loops, conditions, functions...: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
|
r23867 | my_files = !ls ~/ | ||
|
r26585 | for i, file in enumerate(my_files): | ||
|
r21662 | raw = !echo $backup $file | ||
|
r26585 | !cp $file {file.split('.')[0] + '.bak'} | ||
|
r21662 | |||
Magics | ||||
------ | ||||
|
r26381 | Magic functions (magics) are often present in the form of shell-like syntax, but they are | ||
|
r26380 | python functions under the hood. The syntax and assignment possibilities are | ||
|
r21667 | similar to the one with the bang (``!``) syntax, but with more flexibility and | ||
|
r26381 | power. Magic functions start with a percent sign (``%``) or double percent signs (``%%``). | ||
|
r21662 | |||
|
r26381 | A magic call with a single percent sign will act only on one line: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In[1]: %xmode | ||||
Exception reporting mode: Verbose | ||||
|
r26380 | Magics support assignment: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In [1]: results = %timeit -r1 -n1 -o list(range(1000)) | ||||
1 loops, best of 1: 21.1 µs per loop | ||||
In [2]: results | ||||
Out[2]: <TimeitResult : 1 loops, best of 1: 21.1 µs per loop> | ||||
|
r26380 | Magics with double percent signs (``%%``) can spread over multiple lines, but they do not support assignments: | ||
|
r21662 | |||
|
r21713 | .. code-block:: ipython | ||
|
r21662 | |||
In[1]: %%bash | ||||
... : echo "My shell is:" $SHELL | ||||
... : echo "My disk usage is:" | ||||
... : df -h | ||||
My shell is: /usr/local/bin/bash | ||||
My disk usage is: | ||||
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on | ||||
/dev/disk1 233Gi 216Gi 16Gi 94% 56788108 4190706 93% / | ||||
devfs 190Ki 190Ki 0Bi 100% 656 0 100% /dev | ||||
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net | ||||
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /hom | ||||