学习 Python 的利器,IPython shell 功能介绍

󰃭 2017-02-26

安装 IPython 环境

# 安装 ipython
pip install ipython

# 安装 numpy 科学计算库,例子中有使用
pip install numpy

启动 ipython

可以在 ipython shell 下面写 python 代码,回车执行

# 启动 ipython shell
$ ipython

(py3env) servadmin@debian:~/test # ipython
Python 3.4.2 (default, Oct  8 2014, 10:45:20)
Type "copyright", "credits" or "license" for more information.

IPython 4.1.2 -- An enhanced Interactive Python.
?         -> 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.

In [1]: import numpy as np

In [2]: a = 333

In [3]: b = 'hello world'

In [4]: a
Out[4]: 333

In [5]: b
Out[5]: 'hello world'

In [6]:
  • In 表示是用户输入的 python 代码,或者命令
  • In 如果输入一个变量,执行后就会在 Out 输出变量的字符串形式
  • Out 后面是代码执行的输出

主要功能

Tab 键自动完成

tab 的自动完成是对标准 python shell 的增强,在 shell 中输入表达式时按下 tab 键, 可以补全与已输入的字符串相匹配的变量、对象、函数等

# 输入未完成的时候使用键盘的 tab 可以补全
In [6]: import num
numbers  numpy

In [6]: a = [3, 4, 5, 6]

# 补全对象方法
In [7]: a.
a.append   a.clear    a.copy     a.count    a.extend   a.index    a.insert   a.pop      a.remove   a.reverse  a.sort


# 补全模块
In [8]: import datetime

In [9]: datetime.
datetime.MAXYEAR        datetime.date           datetime.datetime_CAPI  datetime.timedelta      datetime.tzinfo
datetime.MINYEAR        datetime.datetime       datetime.time           datetime.timezone


# 补全文件名, system ls 命令列出当前工作目录下的文件(给大家看下)
In [9]: system ls
Out[9]:
['nginx.conf',
'parse_post.py',
'__pycache__',
'qn.py',
'testm.py',
'test_os.py',
'test_post.py',
'test_prog_mem.py',
'upload.py']

# 用 tab 补全文件名
In [10]: a = 'nginx.conf'

运行脚本

# test.py

def test():
    print('hello world')

if __name__ == '__main__':
    test()
In [25]: %run test.py
hello world

内省

  • 在变量前面或者后面加一个 ?,可以现实对象的信息
  • 搜索命名空间,使用通配符 * 与 ?,可以搜索与通配符表达式相匹配的名称
  • 在函数后面使用 ??,显示函数的源代码
# 查看变量信息
In [10]: a?
Type:        list
String form: [3, 4, 5, 6]
Length:      4
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable items


# 定义函数
In [14]: def test():
   ....:     print('hello world')
   ....:

# 查看函数源代码
In [15]: test??
Signature: test()
Source:
def test():
    print('hello world')

File:      ~/test/<ipython-input-14-76b60219b2ae>
Type:      function


# 通配符搜索
In [16]: datetime.*time*?
datetime.datetime
datetime.datetime_CAPI
datetime.time
datetime.timedelta
datetime.timezone

一些特殊的命令(magic)

命令 描述
%quickref 显示 IPython 快速参考手册
%magic 显示特殊命令文档
%debug 从异常跟踪进入交互式调试器
%hist 打印命令输入历史
%run 在 IPython 中执行脚本文件
%time 打印语句的执行时间
%timeit 多次执行代码,计算平均执行时间
%who, %who_ls, %whos 显示在 IPython shell 中定义的变量信息

键盘快捷键 (有一部分在 windows 不可用)

命令 描述
ctrl-p, 向上键 历史中上一条语句、命令
ctrl-n, 向下键 历史中下一条语句、命令
ctrl-a 光标移动到行首
ctrl-e 光标移动到行尾
ctrl-u 删除从当前光标位置到行首的内容
ctrl-k 删除从当前光标位置到行尾的内容
ctrl-l 清屏

与操作系统交互,调用系统命令

命令 描述
!command 在系统 shell 中执行命令
var=!command args 执行命令,把输出保存到变量中
%cd directory 更改工作目录
%pwd 返回当前工作目录
%dhist 打印目录访问记录
%env 打印系统环境变量
# 调用系统命令,查看网卡
In [64]: !ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:da:8e:49 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feda:8e49/64 scope link
       valid_lft forever preferred_lft forever


# 保存网卡信息到变量中
In [65]: a = !ip a | grep 'inet'

In [66]: a
Out[66]:
['    inet 127.0.0.1/8 scope host lo',
 '    inet6 ::1/128 scope host ',
 '    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0',
 '    inet6 fe80::a00:27ff:feda:8e49/64 scope link ']