{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Ipython 解释器" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 进入ipython" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "通常我们并不使用**Python**自带的解释器,而是使用另一个比较方便的解释器——**ipython**解释器,命令行下输入:\n", "\n", " ipython\n", "\n", "即可进入**ipython**解释器。\n", "\n", "所有在**python**解释器下可以运行的代码都可以在**ipython**解释器下运行:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello, world\n" ] } ], "source": [ "print \"hello, world\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "可以进行简单赋值操作:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "直接在解释器中输入变量名,会显示变量的值(不需要加`print`):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "b = [1, 2, 3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ipython magic命令" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**ipython**解释器提供了很多以百分号`%`开头的`magic`命令,这些命令很像linux系统下的命令行命令(事实上有些是一样的)。\n", "\n", "查看所有的`magic`命令:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "application/json": { "cell": { "!": "OSMagics", "HTML": "Other", "SVG": "Other", "bash": "Other", "capture": "ExecutionMagics", "cmd": "Other", "debug": "ExecutionMagics", "file": "Other", "html": "DisplayMagics", "javascript": "DisplayMagics", "latex": "DisplayMagics", "perl": "Other", "prun": "ExecutionMagics", "pypy": "Other", "python": "Other", "python2": "Other", "python3": "Other", "ruby": "Other", "script": "ScriptMagics", "sh": "Other", "svg": "DisplayMagics", "sx": "OSMagics", "system": "OSMagics", "time": "ExecutionMagics", "timeit": "ExecutionMagics", "writefile": "OSMagics" }, "line": { "alias": "OSMagics", "alias_magic": "BasicMagics", "autocall": "AutoMagics", "automagic": "AutoMagics", "autosave": "KernelMagics", "bookmark": "OSMagics", "cd": "OSMagics", "clear": "KernelMagics", "cls": "KernelMagics", "colors": "BasicMagics", "config": "ConfigMagics", "connect_info": "KernelMagics", "copy": "Other", "ddir": "Other", "debug": "ExecutionMagics", "dhist": "OSMagics", "dirs": "OSMagics", "doctest_mode": "BasicMagics", "echo": "Other", "ed": "Other", "edit": "KernelMagics", "env": "OSMagics", "gui": "BasicMagics", "hist": "Other", "history": "HistoryMagics", "install_default_config": "DeprecatedMagics", "install_ext": "ExtensionMagics", "install_profiles": "DeprecatedMagics", "killbgscripts": "ScriptMagics", "ldir": "Other", "less": "KernelMagics", "load": "CodeMagics", "load_ext": "ExtensionMagics", "loadpy": "CodeMagics", "logoff": "LoggingMagics", "logon": "LoggingMagics", "logstart": "LoggingMagics", "logstate": "LoggingMagics", "logstop": "LoggingMagics", "ls": "Other", "lsmagic": "BasicMagics", "macro": "ExecutionMagics", "magic": "BasicMagics", "matplotlib": "PylabMagics", "mkdir": "Other", "more": "KernelMagics", "notebook": "BasicMagics", "page": "BasicMagics", "pastebin": "CodeMagics", "pdb": "ExecutionMagics", "pdef": "NamespaceMagics", "pdoc": "NamespaceMagics", "pfile": "NamespaceMagics", "pinfo": "NamespaceMagics", "pinfo2": "NamespaceMagics", "popd": "OSMagics", "pprint": "BasicMagics", "precision": "BasicMagics", "profile": "BasicMagics", "prun": "ExecutionMagics", "psearch": "NamespaceMagics", "psource": "NamespaceMagics", "pushd": "OSMagics", "pwd": "OSMagics", "pycat": "OSMagics", "pylab": "PylabMagics", "qtconsole": "KernelMagics", "quickref": "BasicMagics", "recall": "HistoryMagics", "rehashx": "OSMagics", "reload_ext": "ExtensionMagics", "ren": "Other", "rep": "Other", "rerun": "HistoryMagics", "reset": "NamespaceMagics", "reset_selective": "NamespaceMagics", "rmdir": "Other", "run": "ExecutionMagics", "save": "CodeMagics", "sc": "OSMagics", "set_env": "OSMagics", "store": "StoreMagics", "sx": "OSMagics", "system": "OSMagics", "tb": "ExecutionMagics", "time": "ExecutionMagics", "timeit": "ExecutionMagics", "unalias": "OSMagics", "unload_ext": "ExtensionMagics", "who": "NamespaceMagics", "who_ls": "NamespaceMagics", "whos": "NamespaceMagics", "xdel": "NamespaceMagics", "xmode": "BasicMagics" } }, "text/plain": [ "Available line magics:\n", "%alias %alias_magic %autocall %automagic %autosave %bookmark %cd %clear %cls %colors %config %connect_info %copy %ddir %debug %dhist %dirs %doctest_mode %echo %ed %edit %env %gui %hist %history %install_default_config %install_ext %install_profiles %killbgscripts %ldir %less %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %macro %magic %matplotlib %mkdir %more %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %ren %rep %rerun %reset %reset_selective %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode\n", "\n", "Available cell magics:\n", "%%! %%HTML %%SVG %%bash %%capture %%cmd %%debug %%file %%html %%javascript %%latex %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile\n", "\n", "Automagic is ON, % prefix IS NOT needed for line magics." ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%lsmagic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`line magic` 以一个百分号开头,作用与一行;\n", "\n", "`cell magic` 以两个百分号开头,作用于整个cell。\n", "\n", "最后一行`Automagic is ON, % prefix IS NOT needed for line magics.`说明在此时即使不加上`%`也可以使用这些命令。\n", "\n", "使用 `whos` 查看当前的变量空间:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable Type Data/Info\n", "----------------------------\n", "a int 1\n", "b list n=3\n" ] } ], "source": [ "%whos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `reset` 重置当前变量空间:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%reset -f" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "再查看当前变量空间:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Interactive namespace is empty.\n" ] } ], "source": [ "%whos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `pwd` 查看当前工作文件夹:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u'C:\\\\Users\\\\lijin\\\\Documents\\\\Git\\\\python-tutorial\\\\01. python tools'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%pwd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `mkdir` 产生新文件夹:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%mkdir demo_test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `cd` 改变工作文件夹:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\\demo_test\n" ] } ], "source": [ "%cd demo_test/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `writefile` 将cell中的内容写入文件:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing hello_world.py\n" ] } ], "source": [ "%%writefile hello_world.py\n", "print \"hello world\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `ls` 查看当前工作文件夹的文件:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 驱动器 C 中的卷是 System\n", " 卷的序列号是 DC4B-D785\n", "\n", " C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\\demo_test 的目录\n", "\n", "2015/09/18 11:32 .\n", "2015/09/18 11:32 ..\n", "2015/09/18 11:32 19 hello_world.py\n", " 1 个文件 19 字节\n", " 2 个目录 121,763,831,808 可用字节\n" ] } ], "source": [ "%ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `run` 命令来运行这个代码:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello world\n" ] } ], "source": [ "%run hello_world.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "删除这个文件:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import os\n", "os.remove('hello_world.py')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "查看当前文件夹,`hello_world.py` 已被删除:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 驱动器 C 中的卷是 System\n", " 卷的序列号是 DC4B-D785\n", "\n", " C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\\demo_test 的目录\n", "\n", "2015/09/18 11:32 .\n", "2015/09/18 11:32 ..\n", " 0 个文件 0 字节\n", " 2 个目录 121,763,831,808 可用字节\n" ] } ], "source": [ "%ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "返回上一层文件夹:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\n" ] } ], "source": [ "%cd .." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `rmdir` 删除文件夹:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%rmdir demo_test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `hist` 查看历史命令:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "print \"hello, world\"\n", "a = 1\n", "a\n", "b = [1, 2, 3]\n", "%lsmagic\n", "%whos\n", "%reset -f\n", "%whos\n", "%pwd\n", "%mkdir demo_test\n", "%cd demo_test/\n", "%%writefile hello_world.py\n", "print \"hello world\"\n", "%ls\n", "%run hello_world.py\n", "import os\n", "os.remove('hello_world.py')\n", "%ls\n", "%cd ..\n", "%rmdir demo_test\n", "%hist\n" ] } ], "source": [ "%hist" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ipython 使用" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `?` 查看函数的帮助:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sum?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `??` 查看函数帮助和函数源代码(如果是用**python**实现的):" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using matplotlib backend: Qt4Agg\n", "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "# 导入numpy和matplotlib两个包\n", "%pylab\n", "# 查看其中sort函数的帮助\n", "sort??" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**ipython** 支持使用 `` 键自动补全命令。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用 `_` 使用上个cell的输出结果:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "12" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 12\n", "a" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "25" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_ + 13" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "可以使用 `!` 来执行一些系统命令。" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "正在 Ping baidu.com [180.149.132.47] 具有 32 字节的数据:\n", "来自 180.149.132.47 的回复: 字节=32 时间=69ms TTL=49\n", "来自 180.149.132.47 的回复: 字节=32 时间=64ms TTL=49\n", "来自 180.149.132.47 的回复: 字节=32 时间=61ms TTL=49\n", "来自 180.149.132.47 的回复: 字节=32 时间=63ms TTL=49\n", "\n", "180.149.132.47 的 Ping 统计信息:\n", " 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),\n", "往返行程的估计时间(以毫秒为单位):\n", " 最短 = 61ms,最长 = 69ms,平均 = 64ms\n" ] } ], "source": [ "!ping baidu.com" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "当输入出现错误时,**ipython**会指出出错的位置和原因:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "ename": "TypeError", "evalue": "unsupported operand type(s) for +: 'int' and 'str'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;36m1\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\"hello\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'" ] } ], "source": [ "1 + \"hello\"" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }