苏州网站建设设计制作公司,天津市网站建站制作,免费创建网站教程,利用已有网站 制作IPython#xff1a;Python 交互式编程的强大工具 1. Python 交互式解释器与 IPython 概述 Python 的一大优势在于其交互式解释器#xff0c;也就是 shell。这个 shell 为我们提供了快速测试想法、验证模块特性和接口#xff0c;以及执行一些一次性任务的途径#xff0c;否…IPythonPython 交互式编程的强大工具1. Python 交互式解释器与 IPython 概述Python 的一大优势在于其交互式解释器也就是 shell。这个 shell 为我们提供了快速测试想法、验证模块特性和接口以及执行一些一次性任务的途径否则我们可能需要编写一个三行的脚本。通常我们在编码时会同时运行文本编辑器和 Python 提示符实际上是 IPython 提示符频繁地在两者之间切换还会在它们之间复制代码。这种方式能让我们立即看到 Python 对代码的处理结果从而快速让文本编辑器中的代码按我们的期望运行。IPython 是一系列交互式 Python 功能的集合它是一个出色的 Python shell远优于标准的 Python shell。它还能创建高度定制的基于控制台的命令环境能轻松将交互式 Python shell 集成到任何 Python 应用中甚至在一定程度上可以用作系统 shell。IPython 背后有一个活跃且极具帮助的社区。你可以在 IPython 用户邮件列表 注册还有一个很棒的 Wiki 其中包含 IPython 实用技巧 。你可以根据自己的意愿阅读或为这些资源做出贡献。此外你还可以参与 IPython 的开发它最近采用了分布式源代码控制系统你可以分支其代码并进行修改。如果你所做的修改能让他人受益还可以提交给他们。2. IPython 名人简介Fernando Perez拥有物理学博士学位曾在科罗拉多大学应用数学系从事数值算法开发工作。目前是加州大学伯克利分校海伦·威尔斯神经科学研究所的研究科学家专注于脑成像问题的新分析方法和高级科学计算工具的开发。在研究生学习后期他参与了科学计算 Python 工具的开发。2001 年他启动了开源的 IPython 项目旨在为日常科学任务寻找更高效的交互式工作流程。随着越来越多的协作者参与这个项目多年来不断发展对科学领域之外的程序员也很有用。Ville Vainio2003 年从芬兰萨塔昆塔应用科学大学波里理工学院获得软件工程学士学位。截至目前他是迪吉亚公司智能手机部门的软件专家为诺基亚的 Symbian OS 平台和 UIQ 进行 C 开发。在学习期间他曾在 Cimcorp Oy 担任软件工程师用 Python 为工业机器人开发通信软件。他是一位长期的 IPython 爱好者自 2006 年 1 月起担任稳定分支0.x 系列的维护者。他对 IPython 的工作始于一系列补丁目的是让 IPython 在 Windows 上作为系统 shell 表现更好系统 shell 的使用场景仍然是他个人关注的重点。他和未婚妻住在芬兰波里正在坦佩雷理工大学波里分校进行硕士论文项目研究 ILeoIPython - Leo 桥接器使 Leo 成为一个功能齐全的 IPython 笔记本。3. IPython 的安装方法IPython 有几种安装方式| 安装方式 | 具体步骤 || ---- | ---- || 源码安装 | 1. 访问 IPython 下载页面 在撰写本文时最新版本是 0.8.20.8.3 即将完成。下载 ipython - 0.8.2.tar.gz 文件。2. 使用命令tar zxvf ipython - 0.8.2.tar.gz解压下载的文件。3. 解压后的目录中会有一个setup.py文件使用命令python setup.py install进行安装。这将把 IPython 库安装到你的site - packages目录并在你的脚本目录中创建一个ipython脚本。在 UNIX 系统上通常与 Python 二进制文件位于同一目录。如果你使用系统包管理器安装的 Python那么 IPython 可能位于/usr/bin。 || 使用系统包管理器安装 | 在 Debian 和 Ubuntu 系统上可以使用.deb包进行安装。执行命令apt - get install ipython即可。Ubuntu 会将 IPython 库安装到/usr/share/python - support/ipython并通过一系列.pth文件和符号链接来确保其正常工作同时将ipython二进制文件安装到/usr/bin/ipython。 || 使用 Python 包安装 | Python 包是以 ZIP 格式打包的文件扩展名为.egg通常称为 “eggs”。可以使用easy_install实用程序进行安装。easy_install的一个很棒的特性是它会检查中央 egg 仓库然后确定要安装的内容。这个仓库被称为 Python 包索引PyPI也有人亲切地称之为 “Python 奶酪店”。要使用easy_install安装 IPython只需以有权限写入 Pythonsite - packages目录的用户身份登录然后执行easy_install ipython。 || 免安装使用 | 如果你下载了源码包直接从文件根目录运行ipython.py就可以启动下载版本的 IPython。这在你不想让site - packages目录变得杂乱时很有用但需要注意一些限制。如果你在解压目录中运行 IPython 且不修改PYTHONPATH环境变量就无法将其作为库使用。 |4. IPython 基础概念安装 IPython 后首次运行ipython时会看到如下内容jmjonesdink:~$ ipython ********************************************************************** Welcome to IPython. I will try to create a personal configuration directory where you can customize many aspects of IPythons functionality in: /home/jmjones/.ipython Successful installation! Please read the sections Initial Configuration and Quick Tips in the IPython manual (there are both HTML and PDF versions supplied with the distribution) to make sure that your system environment is properly configured to take advantage of IPythons features. Important note: the configuration system has changed! The old system is still in place, but its setting may be partly overridden by the settings in ~/.ipython/ipy_user_conf.py config file. Please take a look at the file if some of the new settings bother you. Please press RETURN to start IPython.按下回车键后光标会等待你输入IPython 会显示以下文本jmjonesdinkgutsy:stable - dev$ python ipython.py Python 2.5.1 (r251:54863, Mar 7 2008, 03:39:23) Type copyright, credits or license for more information. IPython 0.8.3.bzr.r96 -- An enhanced Interactive Python. ? - Introduction and overview of IPythons features. %quickref - Quick reference. help - Pythons own help system. object? - Details about object. ?object also works, ?? prints more. In [1]:5. 与 IPython 交互初次面对新的 shell 提示符时我们常常会感到无所适从不清楚该做什么。就像第一次登录 Unix 系统看到 (ba|k|c|z)sh 提示符时一样。如果你对 Unix shell 有一定的了解那么掌握 IPython 就会很容易。当你第一次看到 IPython 提示符时不清楚该做什么的一个原因是你能做的事情几乎是无限的。所以更合适的做法是思考你想做什么。在 IPython 提示符下你可以使用 Python 语言的所有特性还有许多 IPython 的 “魔法” 函数。你还能在 IPython 中轻松执行任何 Unix shell 命令并将输出存储到 Python 变量中。以下是一些简单赋值操作的输入和输出示例In [1]: a 1 In [2]: b 2 In [3]: c 3这与在标准 Python 提示符下输入相同内容的结果看起来没太大区别只是简单地分别将 1、2、3 赋值给了a、b、c。IPython 和标准 Python shell 的最大区别在于IPython 会提供带编号的提示符。现在我们可以查看这些变量的值In [4]: print a 1 In [5]: print b 2 In [6]: print c 3这是一个比较刻意的示例因为我们刚刚输入了这些值最坏的情况下我们可以向上滚动查看。每个变量的显示比实际显示其值多使用了六个字符。下面是一种更简洁的显示方式In [7]: a Out[7]: 1 In [8]: b Out[8]: 2 In [9]: c Out[9]: 3虽然输出的值看起来差不多但还是有区别的。print语句使用的是 “非官方” 的字符串表示形式而直接输入变量名使用的是 “官方” 的字符串表示形式。当处理自定义类时这种区别通常比处理内置类时更重要。以下是一个展示不同字符串表示形式的示例In [10]: class DoubleRep(object): ....: def __str__(self): ....: return Hi, Im a __str__ ....: def __repr__(self): ....: return Hi, Im a __repr__ ....: ....: In [11]: dr DoubleRep() In [12]: print dr Hi, Im a __str__ In [13]: dr Out[13]: Hi, Im a __repr__我们创建了DoubleRep类包含__str__和__repr__两个方法用于演示打印对象和显示其 “官方” 字符串表示形式的区别。当需要 “非官方” 字符串表示形式时会调用对象的__str__特殊方法当需要 “官方” 表示形式时会调用__repr__特殊方法。实例化DoubleRep对象并赋值给dr后使用print语句时调用了__str__方法直接输入变量名时调用了__repr__方法。这种行为并非 IPython 所特有标准 Python shell 也是如此。以下是在标准 Python shell 中使用相同DoubleRep类的示例 class DoubleRep(object): ... def __str__(self): ... return Hi, Im a __str__ ... def __repr__(self): ... return Hi, Im a __repr__ ... dr DoubleRep() print dr Hi, Im a __str__ dr Hi, Im a __repr__你可能已经注意到标准 Python 提示符由三个大于号组成而 IPython 提示符由 “In” 后面跟着一个方括号中的数字和冒号In [1]:组成。这可能是因为 IPython 会跟踪你输入的命令并将它们存储在一个名为In的列表中。在前面的示例中将 1、2、3 赋值给a、b、c后In列表的内容如下In [4]: print In [\n, ua 1\n, ub 2\n, uc 3\n, uprint In\n]IPython 提示符的输出与标准 Python 提示符的输出也有所不同。IPython 提示符似乎区分了两种类型的输出写入输出和计算输出。实际上IPython 并没有真正区分这两种类型。print调用是计算的副作用IPython 无法捕获它们这些print副作用会直接输出到标准输出stdout。而当 IPython 执行用户代码时会检查返回值如果返回值不为None则会在Out [number]:提示符下打印出来。以下是 IPython 为变量赋值、计算变量、显示其值并打印该值的示例注意赋值、显示变量计算结果和打印变量值这几个任务之间的区别# IPython 提示符 In [1]: a 1 In [2]: a Out[2]: 1 In [3]: print a 1 In [4]: # 标准 Python 提示符 a 1 a 1 print a 1 在为变量赋值方面IPython 和 Python 没有区别两者都会立即向用户返回输入提示符。但在显示变量的 “官方” 字符串表示形式时IPython 只显示Out提示符而 Python 直接显示输出。在打印方面两者没有区别都不显示提示符直接显示输出。In [some number]:和Out [some number]:这种形式可能会让你想知道 IPython 和标准 Python 之间是否有更深刻的区别还是仅仅是表面上的不同。实际上这种区别是很深刻的它代表了一个功能领域使 IPython 似乎属于与标准 Python shell 不同类别的交互式 shell。有两个内置变量你需要了解即In和Out。前者是一个 IPython 输入列表对象后者是一个字典对象。以下是type函数对In和Out的类型检查结果In [1]: type(In) Out[1]: class IPython.iplib.InputList In [2]: type(Out) Out[2]: type dict当你开始使用In和Out时就会明白它们的用途。以下是它们所包含的内容示例In [3]: print In [\n, utype(In)\n, utype(Out)\n, uprint In\n] In [4]: print Out {1: class IPython.iplib.InputList, 2: type dict}正如你所期望的In和Out分别存储了你输入的内容和非None语句及表达式的计算结果。由于每一行都必须有输入所以用列表结构来跟踪输入是合理的。但用列表结构来跟踪输出会导致很多空字段或只包含None的字段。因此由于并非每一行都有可计算的非None输出用类似字典的数据结构甚至纯字典对象来跟踪输出是有意义的。6. IPython 的制表符补全功能IPython 另一个非常有用的数据输入特性是默认支持制表符补全。标准 Python shell 如果在编译时启用了readline支持也有制表符补全功能但你需要进行如下操作 import rlcompleter, readline readline.parse_and_bind(tab: complete)这样就可以实现以下功能 import os os.lisTAB os.listdir os.liTABTAB os.linesep os.link os.listdir导入rlcompleter和readline并设置readline的制表符补全选项后我们可以导入os模块输入os.lis后按一次 Tab 键它会补全为os.listdir。输入os.li后按两次 Tab 键会得到可能的补全列表。在 IPython 中无需额外配置就能实现相同的功能。虽然标准 Python shell 也可以免费使用这个功能但在 IPython 中它是默认行为。以下是在 IPython 中运行上述示例的情况In [1]: import os In [2]: os.lisTAB In [2]: os.listdir In [2]: os.liTAB os.linesep os.link os.listdir注意在这个示例的最后部分我们只需要按一次 Tab 键。综上所述IPython 为 Python 开发者提供了丰富的功能和便利无论是从安装方式的多样性还是其独特的交互式体验和实用的制表符补全功能都使其成为 Python 编程中不可或缺的工具。希望通过本文的介绍你能对 IPython 有更深入的了解并在实际编程中充分发挥其优势。IPythonPython 交互式编程的强大工具7. IPython 魔法函数简介IPython 提供了许多“魔法”函数这些函数以百分号%开头为用户提供了额外的功能和便捷操作。以下是一些常见魔法函数的介绍| 魔法函数 | 功能描述 | 示例 || ---- | ---- | ---- || %quickref | 快速参考显示 IPython 常用功能的简要说明 |%quickref|| %timeit | 测量代码执行时间 |%timeit [i**2 for i in range(1000)]|| %run | 运行 Python 脚本 |%run script.py|| %history | 显示命令历史记录 |%history|这些魔法函数可以大大提高我们在 IPython 中进行代码测试、性能分析和脚本运行的效率。8. IPython 与 Unix 命令交互在 IPython 中我们可以轻松地执行 Unix shell 命令并将输出存储到 Python 变量中。这一特性使得我们可以在 Python 环境中方便地与系统进行交互。以下是具体的操作步骤1.直接执行 Unix 命令在 IPython 提示符下只需在命令前加上感叹号!即可执行 Unix 命令。例如In [1]: !ls file1.txt file2.py folder将命令输出存储到变量中可以使用反引号将 Unix 命令括起来并将其赋值给一个 Python 变量。例如In [2]: output ls In [3]: print output file1.txt file2.py folder通过这种方式我们可以在 Python 代码中灵活地使用 Unix 命令的输出实现更复杂的功能。9. IPython 的配置与定制IPython 允许用户对其进行配置和定制以满足不同的使用需求。以下是一些常见的配置和定制方法-创建个人配置目录首次运行 IPython 时会尝试在~/.ipython目录下创建个人配置目录用户可以在该目录下对 IPython 的功能进行定制。-修改配置文件在~/.ipython/ipy_user_conf.py配置文件中可以修改各种 IPython 的设置。例如修改提示符的样式、添加自定义的魔法函数等。以下是一个简单的示例修改提示符的样式# 在 ipy_user_conf.py 中添加以下代码 c get_config() c.TerminalInteractiveShell.prompts_class MyPrompt class MyPrompt(Prompts): def in_prompt_tokens(self, cliNone): return [(Token.Prompt, MyIPython )]使用配置命令在 IPython 中可以使用%config命令来临时修改配置。例如修改历史记录的保存数量In [1]: %config HistoryManager.hist_file_size 100010. IPython 在科学计算中的应用IPython 在科学计算领域有着广泛的应用以下是一些具体的应用场景和示例-数据探索与分析IPython 可以与 NumPy、Pandas 等科学计算库结合使用方便地进行数据探索和分析。例如使用 Pandas 读取和处理 CSV 文件import pandas as pd # 读取 CSV 文件 data pd.read_csv(data.csv) # 查看数据基本信息 print data.info() # 查看数据集行数和列数 rows, columns data.shape if rows 100: # 短表数据行数少于100查看全量数据信息 print data.to_csv(sep\t, na_repnan) else: # 长表数据查看数据前几行信息 print data.head().to_csv(sep\t, na_repnan)可视化结合 Matplotlib、Seaborn 等可视化库IPython 可以方便地进行数据可视化。例如绘制简单的折线图import matplotlib.pyplot as plt import numpy as np # 生成数据 x np.linspace(0, 10, 100) y np.sin(x) # 绘制折线图 plt.plot(x, y) plt.xlabel(x) plt.ylabel(y) plt.title(Sine Wave) plt.show()数值计算使用 NumPy 进行高效的数值计算。例如计算矩阵的乘法import numpy as np # 创建矩阵 A np.array([[1, 2], [3, 4]]) B np.array([[5, 6], [7, 8]]) # 矩阵乘法 C np.dot(A, B) print C11. IPython 工作流程示例为了更好地理解如何使用 IPython 进行开发以下是一个简单的工作流程示例graph LR A[启动 IPython] -- B[导入必要的库] B -- C[数据准备] C -- D[数据处理与分析] D -- E[可视化结果] E -- F[保存结果或导出报告]具体步骤如下1.启动 IPython在终端中输入ipython命令启动 IPython。2.导入必要的库根据任务需求导入所需的 Python 库。例如import numpy as np import pandas as pd import matplotlib.pyplot as plt数据准备读取和处理数据。例如读取 CSV 文件data pd.read_csv(data.csv)数据处理与分析对数据进行清洗、转换和分析。例如计算数据的统计信息statistics data.describe() print statistics可视化结果使用可视化库将分析结果可视化。例如绘制柱状图plt.bar(data[category], data[value]) plt.xlabel(Category) plt.ylabel(Value) plt.title(Bar Chart) plt.show()保存结果或导出报告将分析结果保存到文件或导出为报告。例如将统计信息保存为 CSV 文件statistics.to_csv(statistics.csv)12. 总结与展望IPython 作为 Python 交互式编程的强大工具为开发者提供了丰富的功能和便捷的操作体验。它不仅具有优于标准 Python shell 的特性如带编号的提示符、制表符补全、魔法函数等还能与 Unix 命令交互方便地进行系统操作。此外IPython 在科学计算、数据处理和可视化等领域有着广泛的应用大大提高了开发效率。随着 Python 在各个领域的应用越来越广泛IPython 也在不断发展和完善。未来我们可以期待 IPython 提供更多的功能和更好的用户体验为 Python 开发者带来更多的便利。同时我们也鼓励开发者积极参与 IPython 的社区建设为其发展贡献自己的力量。希望通过本文的介绍你能对 IPython 有更全面的了解并在实际编程中充分发挥其优势提升自己的开发效率和编程体验。