IPython学习笔记

IPython

前言

Life is short, you need Python

最近开始学习数据挖掘,需要使用到Python,其实大学时代就有接触过Python,但是却始终没有系统的进行学习过。
正好最近有接触简书,非常认同其中的一个观点:

以输出为导向的学习才是最有效的学习

所以我决定每天抽出一点时间进行三件事情:

  1. 学习
  2. 思考
  3. 书写

本次介绍的是IPython,相比自带的Python Shell。IPython更好用,体现在以下几个方面:

  • 支持操作系统命令:ls,pwd,cd,cp等
  • 通过!可执行shell命令,通过run可以执行shell脚本
  • 丰富的查看命令:who,whos,who_ls,?,??
  • 自动补全功能
  • 复制黏贴功能paste,cpaste

工具

Python for Data Anaysis一书很多人都推荐过,读了几章的确不错,本文将对首先书中提到的IPython工具进行一个介绍,更确切的说本文本身就是通过Ipython notebook生成的。通过markdown语言和代码的穿插,可以很好的将自己的想法与代码执行结果结合在一起展示。

启动IPython NoteBook

》Ipython notebook

操作系统命令

查看更多的操作系统命令可以通过magic函数:%quickref,下面仅通过ls命令做示例

ls
IPython.ipynb  PLA.copy       PLA.py         readme.txt

创建几个变量,为后续示例做准备

import numpy as np
al=[1,2,3]
ar=np.array(al)
print ar
[1 2 3]
from numpy.random import randn
data={i :randn() for i in range(7)}
print data
{0: -0.3461532513622743, 1: 1.4775166286053654, 2: 1.862570831741997, 3: 0.17019164149715485, 4: 0.26425221191468445, 5: 0.0175062396217853, 6: -0.6275550351675295}

执行shell命令与python脚本

在IPython中通过!直接执行shell命令,可以大大提高效率,如先编辑!vi hello.py,再执行run hello.py

丰富的查看功能

  • 可以查看所有变量whowhos
  • 通过?查看单个变量的详情,如果有源码还可以通过??查看
whos
Variable   Type                          Data/Info
--------------------------------------------------
al         list                          n=3
ar         ndarray                       3: 3 elems, type `int64`, 24 bytes
data       dict                          n=7
np         module                        <module 'numpy' from '/Us<...>ages/numpy/__init__.pyc'>
randn      builtin_function_or_method    <built-in method randn of<...>te object at 0x10431ae10>
al?

自动补全

  • 通过Tab键可实现自动补全
  • 通过Ctrl+P可实现基于历史命令的补全

复制黏贴功能

通过paste命令,可以将粘贴板中的代码以一个block的形式粘贴到shell中执行,避免直接粘贴所带来的对齐等问题

支持debug

直接在IPython中debug可以提高效率,在进入debug模式ipdb,可通过?查询所有debug命令,并通过help topic查看具体某个命令的用法与含义,先介绍常见的几个命令:

  • b num 在num行设置断点
  • c (continue)继续执行
  • n (next)下一步
  • s (step) into 进入调用函数内部
    以下为一个示例
run -d hello.py
Breakpoint 1 at /Users/sunq/git/LearnPython/hello.py:1
NOTE: Enter 'c' at the ipdb>  prompt to continue execution.
> /Users/sunq/git/LearnPython/hello.py(1)<module>()
1---> 1 a=3
      2 b=5
      3 c=a+b
      4 print c
      5 print 'hello'

ipdb> b 3
Breakpoint 2 at /Users/sunq/git/LearnPython/hello.py:3
ipdb> n
> /Users/sunq/git/LearnPython/hello.py(2)<module>()
1     1 a=3
----> 2 b=5
2     3 c=a+b
      4 print c
      5 print 'hello'

ipdb> c
> /Users/sunq/git/LearnPython/hello.py(3)<module>()
1     1 a=3
      2 b=5
2---> 3 c=a+b
      4 print c
      5 print 'hello'

ipdb> c
8
hello
from python

计算程序耗时

time命令

time np.arange(100)+np.arange(100)
CPU times: user 44 µs, sys: 22 µs, total: 66 µs
Wall time: 56 µs





array([  0,   2,   4,   6,   8,  10,  12,  14,  16,  18,  20,  22,  24,
        26,  28,  30,  32,  34,  36,  38,  40,  42,  44,  46,  48,  50,
        52,  54,  56,  58,  60,  62,  64,  66,  68,  70,  72,  74,  76,
        78,  80,  82,  84,  86,  88,  90,  92,  94,  96,  98, 100, 102,
       104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128,
       130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154,
       156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180,
       182, 184, 186, 188, 190, 192, 194, 196, 198])
posted @ 2016-07-08 22:52  sunqiang  阅读(5087)  评论(0编辑  收藏  举报