Ipython


title: Ipython
date: 2020-12-13 11:13:50
tags: Python


  • [ ] Ipython相关功能、代码

IPython本身并没有提供任何的计算或数据分析功能,其设计的目的是在交互式计算软件开发这两个方面最大化地提高生产力。

执行-探索 VS 编辑-编译-运行
操作系统shell和文件系统之间也有着非常紧密的集成。
注意,要使用正斜杠(/),不然认不出来。此外,文件夹或文件名中间不能有空格,不然也无法正常继续操作。

  1. IPython中输入了一一个变量,那么它将会显示出该对象的一个字符串表示
  2. Tab键自动完成,输入表达式时,只要按下Tab键,当前命名空间中任何与已输入的字符串相匹配的变量(对象、函数等)就会被找出来:
  • 对象+句点 :方法和属性的自动输入
  • 模块+句点
  • IPython默认会隐藏那些以下划线开头的方法和属性,比如魔术方法(magic method)以及内部的“私有”方法和属性
  • 任何看上去像是文件路径的东西时(即使是在--个Python字符串中),按下Tab键即可找出电脑文件系统中与之匹配的东西: book_ scripts/,path = ' book_ scripts/

内省

在变量的起前面或者后面加上一个问号?

def add_numbers(a,b):
"""
ADD two numbers together 
Returns
----
the_sum: type of ar
"""
  1. 利用?来显示这段docstring
  2. 利用??还将显示出该函数的源代码(如果可能的话)

? 还可以搜索IPython命名空间,类似于标准UNIX或Windows命令行中的那种
用法。一些字符再配以通配符(*)即可显示出所有与该通配符表达式相匹配的名称。

%run命令

  1. 在IPython会话环境中,所有文件都可以通过%run命令来当做Python程序运行 (eg.%run ipthon_script_test.py)
  2. 脚本是在一个空的命名空间中运行的( 没有任何import,也没有定义任何其他的变量),所以其行为应该跟在标准命令行环境(通过python script.py启动的)中执行时一样。此后,该文件中所定义的全部变量(还有各种import、函数和全局变量)就可以在当前IPython shell中访问了(除非发生了异常) :
  3. 如果希望脚本能够访问在交互式IPython命名空间中定义的变量,那就应该使用%run-i
  4. 如果Python脚本需要用到命令行参数(通过sys.argv访问),可以将参数放到文件路径的后面,就像在命令行上执行那样。

中断正在执行的代码

Ctrl - C ,引发一个KeyboardInterrupt
当Python代码已经调用了某个已编译的扩展模块,Python解释器重新获得控制权,此时要终止Python进程,只能通过操作系统的任务管理器强制终止Python进程

执行剪贴板中的代码

%paste 可以承载剪贴板中的一切文本,并在shell中以整体形式执行
%cpaste 要%paste差不多,多出了一个用于粘贴代码的特殊提示符 :
对于%cpaste块,在最终执行之前,你想粘贴多少代码就粘贴多少。如果想在执行那些粘贴进去的代码之前先检查一番,就可以考虑使用%cpaste。如果发现粘贴的代码有错,只需按下“Ctrl-C” 即可终止%cpaste提示符。

IPython跟编辑器和IDE之间的交互

键盘快捷键

命令 说明
Ctrl - P 后向搜索命令历史中以当前输入的文本开头的命令
Ctrl - N 前向搜索命令历史中以当前输入的文本开头的命令
Ctrl - R 按行读取的反向历史搜索
Ctrl - L 清屏
Ctrl - C 中止现在正在执行的代码
Ctrl - A 将光标移动到行首
Ctrl- E 将光标移动到行尾
Ctrl - K 删除从光标开始至行尾的文本
Ctrl - U 删除从行首到光标处的文本

Jupyter Notebook

基于网页的用于交互计算的应用程序可被应用于全过程计算:开发、文档编写、运行代码和展示结果

组成部分
	网页应用:
	文档:.ipynb的JSON格式文件

# 运行jupyter Notebook
帮助:jupyter notebook  --help 或 jupyter notebook -h
启动:Jupyter notebook # 默认端口
		之后在Jupyter Notebook的所有操作,都请保持终端不要关闭,因为一旦关闭终端,就会断开与本地服务器的链接
		浏览器地址栏中默认地将会显示:http://localhost:8888
		同时启动了多个Jupyter Notebook,由于默认端口“8888”被占用,因此地址栏中的数字将从“8888”起,每多启动一个Jupyter Notebook数字就加1
	  jupyter notebook --port <port_number> # 指定端口启动
	  jupyter notebook --no-browser # 启动服务器但不打开浏览器

异常和跟踪

  1. 如果%run某段脚本或执行某条语句时发生了异常,IPython默认会输出整个调用栈跟踪(traceback),其中还会附上调用栈各点附近的几行代码作为上下文参考。
  2. %xomde魔术命令进行控制上下文代码的数量

魔术命令

  1. IPython有一些特殊命令( 被称为魔术命令(Magic Command) ),它们有的为常见任务提供便利,有的则使你能够轻松控制IPython系统的行为。

  2. 魔术命令是以百分号%为前缀的命令。例如,你可以通过%timeit这个魔术命令检测任意Python语句( 如矩阵乘法)的执行时间(稍后将对此进行详细讲解) :

  3. 魔术命令默认是可以不带百分号使用的,只要没有定义与其同名的变量即可。这个技术叫做automagic,可以通过%automagic打开或关闭。

  4. 大都还有一些“命令行选项”,使用<命令>?,即可查看其选项

    命令 说明
    %quickref 显示IPython的快速参考
    %magic 显示所有的魔术命令的详细文档
    %debug 从最新的异常跟踪的底部进入交互式调试器
    %hist 打印命令的输入历史
    %pdb 在异常发生后自动进入调试器
    %paste 执行剪切板中的Python代码
    %cpaste 打开一个特殊提示符以便手工粘贴待执行的Python代码
    %reset 删除interactive命名空间中的全部变量/名称
    %page OBJECT
    %run srcipt.py 在IPython中执行- -个Python脚本文件
## 基于Qt的富GUI控制台
## 使用命令
## 搜索并重用命令历史
## 输入和输出变量
## 记录输入和输出
# 操作系统交互
## shell命令和别名
## 目录书签系统
# 软件开发工具
## 交互式调试器
## 调试器的其他使用场景
## 测试代码的执行时间:%time和%timeit
## 基本性能分析:%prun和%run -p
## 逐行分析函数性能

利用IPython提高代码开发效率的几点提示

  1. 重新加载模块依赖项
    当原有模块发生改变时,为避免Python“一次加载”模块系统造成的影响,可以使用内置reload()函数,重新加载,依赖变强时就需要在多个地方插入很多的reload函数;第二种方法是,IPython提供一种特殊的dreload()函数,则它会尝试重新加载模块及其所有的依赖项。
  2. 代码设计提示
  • 保留有意义的对象和数据(直接在该模块的全局命名空间中执行main中的代码(如果你希望该模块是可以引入的,可以将代码放在 if name == 'main': 块中
  • 扁平结构要比嵌套结构好
  • 无惧大文件,更少的文件意味着需要重新加载的模块更少,编辑时需要在各
    个文件之间的跳转次数也更少,
原文地址:https://www.cnblogs.com/aspiration/p/15422699.html