Python解释器和IPython

Stella981 等级 577 0 0
标签: ipythonobject

简介

今天给大家介绍一下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个非常有用的命令:

command

description

?

Introduction and overview of IPython’s features.

%quickref

Quick reference.

help

Python’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 expressionUsage, 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%edit%save%macro%recall, etc.

  • shell环境相关的: %colors%xmode%automagic, etc.

  • 其他的函数: %reset%timeit%%writefile%load, or %paste.

运行和编辑

使用%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 ONIn [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-tech)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

收藏
评论区

相关推荐

Python中的基本list操作
List是python中的基本数据结构之一,和Java中的ArrayList有些类似,支持动态的元素的增加。list还支持不同类型的元素在一个列表中,List is an Object。 最基本的创建一个列表的方法 myList \'a','b','c'\ 在python中list也是对象,所以他也有方法和属性,在ptython解释器中 使用h
Python中JSON的基本使用_Just do it !
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它主要提供了四个方法: dumps、dump、loads、load。 dump和dumps dump和dumps对python对象进行序列化。将一个Python对象
TensorFlow 的 JupyterLab 环境
TensorFlow 准备 JupyterLab 交互式笔记本环境,方便我们边写代码、边做笔记。 基础环境以下是本文的基础环境,不详述安装过程了。 Ubuntu ubuntu18.04.5desktopamd64.iso CUDA cuda11.2.2460.32.03linux.run libcudnn88.1.1.331+cuda11.
VS Code运行Jupyter报错
问题描述: ===== 今天在电脑中安装了Python3.8.5环境,然后使用pip安装了ipython和jupyter,没想到在VS Code中使用Jupyter Notebook一直有问题,一直报一个错误:“Unable to start session for kernel Python 3.8.5 64-bit . Select another k
uliweb在notebook中显示graphviz的svg图时,显示中文乱码的处理
这几天基本完成了在IPython notebook中显示Model关系图的功能,在MAC下工作良好,但是到了windows下,中文字段描述为乱码,主要原因是因为字体造成的。那么如何解决这个问题。在uliweb中,有两个地方会使用graphviz来生成svg图:命令行和IPython notebook环境中。对于命令行,我添加了可以通过命令行参数来传递字体名字
ECharts+Python 给你的数据做“美颜”
![](https://static.oschina.net/uploads/img/201806/07003437_TgAR.jpg) _本文授权转载自公众号:挖地兔(waditu)_ **前言** ------ 最近无意中看到一篇文章,介绍的是在IPython Notebook里实现ECharts的可视化效果。我个人对ECharts一直是推崇有加,
Go语言的类IPython 交互式编程界面
[Bret Victor](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fworrydream.com%2F) 的 [Inventing on principle](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fv.youk
IPython基本介绍
**IPython简介** ------------- ipython shell是一个增强版的交互式python解释器,它的设计目的是在交互式计算和软件开发两个方面最大化的提高生产力。通过ipython可以对大部分python代码进行探索式的操作,例如使用试错法来练习和学习python中的函数,所以使用ipython将有助于提高你的工作效率。 **IP
Python spyder Ipython console 连接失败问题
启动spyder 之后,Ipython console  中Connecting to Kernel,出现错误,一直在连接,但是连接不上,Reset Spyder Settings 也解决不了问题。 Traceback (most recent call last): File "F:\Anaconda_pakage\lib\runpy.p
Python 经典类和新式类
由Python2.7转向python3.4 (感觉python有些语法还是很奇怪如生成器等,好了抱怨了,自己实践的少) 因为国内大部分还是pyhton2的,所以有时莫名其妙会讲这个问题:经典类和新式类 有个好消息是: 在Python3里面,不存在这些问题了,因为所有的类都是object类的子类(隐式)。 class A: pas
Python三大神器之迭代器详解
我们将要来学习python的重要概念迭代和迭代器,通过简单实用的例子如列表迭代器和xrange。 可迭代 --- 一个对象,物理或者虚拟存储的序列。list,tuple,strins,dicttionary,set以及生成器对象都是可迭代的,整型数是不可迭代的。如果你不确定哪个可迭代哪个不可以,你需要用python内建的iter()来帮忙。 >
Python内存管理机制
Python内存管理机制-《源码解析》 Python 内存管理分层架构 /\* An object allocator for Python. Here is an introduction to the layers of the Python memory architecture, showing where the object al
Python解释器和IPython
简介 == 今天给大家介绍一下Python的一个功能非常强大的解释器IPython。虽然Python本身自带解释器,但是相对而言IPython的功能更加的强大。 Python解释器 ========= Python是自带解释器的,我们在命令行输入python即可进入python的解释器环境: $> pythonPython 2.7.15 (d
大数据建模、分析、挖掘技术应用
时间2022年8月5日 — 2022年8月9日 北京(同时转线上直播)(5日报到,6日9日上课)课程第一天一、大数据概述二、大数据处理架构Hadoop三、分布式文件系统HDFS四、分布式数据库HBase第二天五、MapReduce六、Spark七、IPython Notebook运行Python Spark程序八、Python Spark集成开发环境第三
大数据
课程安排 一、大数据概述 二、大数据处理架构Hadoop 三、分布式文件系统HDFS 四、分布式数据库HBase 五、MapReduce 六、Spark 七、IPython Notebook运行Python Spark程序 八、Python Spark集成开发环境 九、Python Spark决策树二分类与多分类 十、Python Spark支持向量机 十一