Some Cool IPython Tips

Ben Cook • Posted 2017-02-25 • Last updated 2021-10-15

The IPython shell is a fast way to evaluate small bits of code. It also functions as a mighty fine calculator. You can install it with pip, pip install ipython, and launch it with the ipython command. Besides the normal Python REPL stuff, here are a few cool things about the IPython shell.

%paste

Let’s say you’re reading a blog post on how to do something amazing in Python and you want to follow along in the shell. If you copy a code snippet to your clipboard, you can type %paste in the shell and it will execute each line one at a time. Go ahead and try it:

one_string = "this "
two_string = "is "
red_string = "pretty "
blue_string = "sweet"
>>> %paste
>>> print(one_string + two_string + red_string + blue_string)

this is pretty sweet

I think this is way better than typing each line by hand.

History

IPython keeps track of history across sessions. So if I remember writing a killer list comprehension last week called hello in IPython, I can get it back by typing:

>>> hello =

And then hitting the up arrow until I find it. If you’re an emacs user, you can also scroll through your history with C-p to go up and C-n to go down. This is based on reverse-i-search in bash, but IPython’s version always seems to work better for me.

View docstrings and source

If you add two question marks ?? before or after a function, class or method, you can see the docstring (if there is one) and the source.

>>> import requests
>>> ??requests.get

Signature: requests.get(url, params=None, **kwargs)
Source:
def get(url, params=None, **kwargs):
   """Sends a GET request.

   :param url: URL for the new :class:`Request` object.
   :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
   :param \*\*kwargs: Optional arguments that ``request`` takes.
   :return: :class:`Response <Response>` object
   :rtype: requests.Response
   """

   kwargs.setdefault('allow_redirects', True)
   return request('get', url, params=params, **kwargs)
File:      /opt/conda/lib/python3.5/site-packages/requests/api.py
Type:      function

This is very useful for figuring out what arguments you need to pass in.