写点什么

Python 解释器和 IPython

发布于: 2021 年 01 月 12 日

简介

今天给大家介绍一下 Python 的一个功能非常强大的解释器 IPython。虽然 Python 本身自带解释器,但是相对而言 IPython 的功能更加的强大。


Python 解释器

Python 是自带解释器的,我们在命令行输入 python 即可进入 python 的解释器环境:


$> pythonPython 2.7.15 (default, Oct  2 2018, 11:47:18)[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.2)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> site = "www.flydean.com">>> site'www.flydean.com'>>>
复制代码

python 解释器的提示符是>>>


python 提供了一个非常有用的命令 help,我们可以使用 help 来查看要使用的命令。


>>> helpType help() for interactive help, or help(object) for help about object.
复制代码

在 Python3 中,还提供了 tab 的补全功能:


>>> site'www.flydean.com'>>> site.site.capitalize(    site.expandtabs(    site.isalpha(       site.isprintable(   site.lower(         site.rindex(        site.splitlines(    site.upper(site.casefold(      site.find(          site.isdecimal(     site.isspace(       site.lstrip(        site.rjust(         site.startswith(    site.zfill(site.center(        site.format(        site.isdigit(       site.istitle(       site.maketrans(     site.rpartition(    site.strip(site.count(         site.format_map(    site.isidentifier(  site.isupper(       site.partition(     site.rsplit(        site.swapcase(site.encode(        site.index(         site.islower(       site.join(          site.replace(       site.rstrip(        site.title(site.endswith(      site.isalnum(       site.isnumeric(     site.ljust(         site.rfind(         site.split(         site.translate(
复制代码

使用起来非常的方便。


和 Python 自带的解释器之外,还有一个更加强大的解释器叫做 IPython。我们一起来看看。


IPython

IPython 是一个非常强大的解释器,通常它是和 jupyter notebook 一起使用的。在 IPython3.X 中,IPython 和 Jupyter 是作为一个整体一起发布的。但是在 IPython4.X 之后,Jupyter 已经作为一个单独的项目,从 IPython 中分离出来了。


使用 IPython 很简单,输入 IPython 命令即可:


$> ipythonPython 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 12:04:33)Type 'copyright', 'credits' or 'license' for more informationIPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: site= "www.flydean.com"
In [2]: siteOut[2]: 'www.flydean.com'
复制代码

IPython 的提示符是In [1]:


基本上 Python 自带的命令在 IPython 中都是可以使用的。


IPython 提供了 4 个非常有用的命令:


commanddescription?Introduction and overview of IPython’s features.%quickrefQuick reference.helpPython’s own help system.object?Details about ‘object’, use ‘object??’ for extra details.


魔法函数

IPython 中有两种魔法函数,一种是 Line magics,一种是 Cell magics


Line magics 接收本行的输入作为函数的输入,是以%开头的。而 Cell magics 可以接收多行的数据,直到你输入空白回车为止。是以%%开头的。


比如我们想要看一个 timeit 的魔法函数的用法,可以使用Object?来表示:


$> In [4]: %timeit?Docstring:Time execution of a Python statement or expression
Usage, in line mode: %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statementor in cell mode: %%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code code code...
复制代码

timeit 用来统计程序的执行时间,我们分别看下 Line magics 和 Cell magics 的使用:


In [4]: %timeit?
In [5]: %timeit range(1000)199 ns ± 3.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [6]: %%timeit range(1000) ...: range(1000) ...:208 ns ± 12.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
复制代码

事实上,如果只是 LIne magics 的话,我们可以省略前面的 %,但是对于 Cell magics 来说,是不能省略的。


In [7]: timeit range(1000)
200 ns ± 4.03 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
复制代码

常见的魔法函数有下面几种:


运行和编辑

使用%run 可以方便的运行外部的 python 脚本。


In [8]: run?Docstring:Run the named file inside IPython as a program.
Usage::
%run [-n -i -e -G] [( -t [-N<N>] | -d [-b<N>] | -p [profile options] )] ( -m mod | file ) [args]
复制代码

run 有几个非常有用的参数,比如-t 可以用来统计程序的时间。-d 可以进行调试环境,-p 可以进行 profiler 分析。


使用%edit 可以编辑多行代码,在退出之后,IPython 将会执行他们。


如果不想立即执行的话,可以加上-x 参数。


Debug

可以使用%debug 或者 %pdb 来进入 IPython 的调试环境:


In [11]: debug> /Users/flydean/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/site-packages/IPython/core/compilerop.py(99)ast_parse()     97         Arguments are exactly the same as ast.parse (in the standard library),     98         and are passed to the built-in compile function."""---> 99         return compile(source, filename, symbol, self.flags | PyCF_ONLY_AST, 1)    100    101     def reset_compiler_flags(self):
ipdb>
复制代码


In [12]: pdbAutomatic pdb calling has been turned ON
In [13]: pdbAutomatic pdb calling has been turned OFF
复制代码

或者可以使用 %run -d theprogram.py 来调试一个外部程序。


History

IPython 可以存储你的输入数据和程序的输出数据,IPython 的一个非常重要的功能就是可以获取到历史的数据。


在交互环境中,一个简单的遍历历史输入命令的方式就是使用 up- 和 down- 箭头。


更强大的是,IPython 将所有的输入和输出都保存在 In 和 Out 这两个变量中,比如 In[4]。


In [1]: site = "www.flydean.com"
In [2]: siteOut[2]: 'www.flydean.com'
In [3]: InOut[3]: ['', 'site = "www.flydean.com"', 'site', 'In']
复制代码

可以使用 _ih[n]来访问特定的 input:


In [4]: _ih[2]Out[4]: 'site'
复制代码

_i, _ii, _iii 可以分别表示前一个,前前一个和前前前一个输入。


除此之外,全局变量 _i 也可以用来访问输入,也就是说:


_i<n> == _ih[<n>] == In[<n>]_i14 == _ih[14] == In[14]
复制代码

同样的,对于输出来说也存在着三种访问方式:


_<n> == _oh[<n>] == Out[<n>]_12 == Out[12] == _oh[12]
复制代码

最后的三个输出也可以通过 ___ 和 ___来获取。


还可以使用 %history 来列出之前的历史数据进行选择。


history 可以和 %edit,%rerun,%recall,%macro,%save%pastebin 配和使用:


通过传入数字,可以选择历史的输入行号。


%pastebin 3 18-20
复制代码

上面的例子会选择第 3 行和第 18-20 行输入。


运行系统命令

使用!可以直接运行系统命令:


In [27]: !pwd/Users/flydean/Downloads
复制代码

还可以用变量接收运行的结果,比如 : files = !ls


本文作者:flydean 程序那些事

本文链接:http://www.flydean.com/python-ipython/

本文来源:flydean 的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!


发布于: 2021 年 01 月 12 日阅读数: 20
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
Python解释器和IPython