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])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM