前言和需求
相信不少人使用JS时,最常用的快捷键是F12。网页调试,不仅可以调试我们的前端页面,对于多数后端JS程序员来讲,我们有个啥语法不确定了,直接开个网页F12确认一下就行了。甚至写了个方法,不确定对不对,直接Console里面测一下也是尝试。
但是,Python,我的朋友,难道必须得开Anacoda/PyCharm,或者常年摆着一个notebook才行吗?显然不可能是这样的。
IPython是我平时实验一些Python语法最常用的方式。而命令行永远是最简单的语法调试测试方式。
安装与启动
首先,确保系统中已安装Python及pip。接着,通过pip安装IPython:
pip install ipython
安装成功后,直接ipython就可以进入python交互命令行了,这个命令行比python的默认命令行友好太多了:
D:\>ipython
Python 3.12.1 (tags/v3.12.1:2305ca5, Dec 7 2023, 22:03:25) [MSC v.1937 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.25.0 -- An enhanced Interactive Python. Type '?' for help.In [1]: import pandasIn [2]: data = [{'col1': 1.0, 'col2': 2.0}]In [4]: pandas.DataFrame(data)
Out[4]:col1 col2
0 1.0 2.0
魔法命令
相比于普通的Python命令行,IPython的一大特色是其“魔法命令”(Magic Commands),以百分号%
或双百分号%%
开头,用于执行特定操作或改变环境设置。例如可以用于测试函数性能的%timeit:
In [7]: def list_comprehension(n):...: return [i for _ in range(n) for i in range(10)]...:In [8]: def nested_loop(n):...: result = []...: for _ in range(n):...: for i in range(10):...: result.append(i)...: return resultIn [9]: %timeit -n 1000 list_comprehension(10)
1.84 μs ± 343 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)In [10]: %timeit -n 1000 nested_loop(10)
2.52 μs ± 453 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
更多的魔法命令包括:
通用命令
%quickref
:显示 IPython 的快速参考卡片。%magic
或%lsmagic
:显示所有可用的魔法命令。%history
:显示命令历史。%clear
或%reset
:清空命令行界面或重置 Interactive namespace(分别对应清除输出和变量)。%pwd
:显示当前工作目录。%cd
:改变当前工作目录。%ls
或ls
:列出当前工作目录的内容。
执行系统命令
!command
:在子shell中执行操作系统命令,如!ls
。
代码执行与性能分析
%time
:计算单个表达式的执行时间。%timeit
:多次执行以精确测量小段代码的执行时间并给出统计信息。%prun
:使用 Python 的 cProfile 模块进行代码性能分析。%memit
:测量代码执行时的内存使用情况。
文档和帮助
%run script.py
:运行 Python 脚本文件。%load script.py
:将脚本文件的内容加载到交互式会话中。%who
,%whos
:列出或详细显示当前命名空间中的变量。%debug
:进入交互式调试器。%paste
:粘贴多行代码并执行。%help
或%?
:获取有关魔法命令或Python对象的帮助。object?
或object??
:显示对象的文档字符串或源代码。
并行计算
%px
:在 IPython 并行集群中的所有引擎上执行代码。%autopx
:自动将随后的代码块发送到并行引擎。%pxresult
:获取最近一次%px
命令的结果。
对于系统命令,也意味着可以在ipython交互中直接这样:
!pip install pandas
特色
相比于默认的Python命令行交互,IPython提供了一些额外的增强:
- 语法高亮
IPython提供了语法高亮的功能,这对与代码看起来更易读。
- 自动补全
自动补全是非常方便的功能,IPython提供了大多数流行库的自动补全,包括如下这样:
以及这样的常用别名:
- 魔术命令(Magic Commands)
- 历史记录
- 对象信息
-
对象信息:
在 IPython 中输入一个变量名后跟上一个问号 ?
,例如 my_variable?
,会显示该变量的文档字符串。如果使用两个问号 ??
,则还会显示源代码(如果可用)。这个功能之强大堪比IDE。
一些冷门小技巧
清除变量
In [1]: a=1In [2]: a
Out[2]: 1In [3]: %reset_selective -f aIn [4]: a
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 aNameError: name 'a' is not defined
对于命令行,变量名称的污染有时候很麻烦。使用%reset_selective可以从名称空间中清除变量。
别名
对于熟手,IPython可以像Linux Bash一样,自定义很多东西,比如命令的别名,使用得到可以自己打造一个类似于Bash的命令行系统:
In [7]: %alias ls dir # 将Windows的dir重命名为lsIn [8]: ls驱动器 D 中的卷没有标签。卷的序列号是 0229-9B9ED:\ 的目录2024/06/12 02:54 <DIR> .ipynb_checkpoints
2024/06/12 02:54 <DIR> .virtual_documents
调试
%debug
魔法命令可以在 IPython 中启动一个交互式调试器,这个调试器在遇到异常时自动启动,或者你可以手动启动来调试某段特定的代码。它提供了类似于Python调试器pdb的功能,但集成在IPython环境中,拥有更好的交互性和易用性。
def access_list_element():
2 my_list = [1, 2, 3]
3 print(my_list[3]) # 这里会抛出 IndexError
结语
IPython是一个很方便的命令行Python交互工具,如果你十分熟练,甚至可以把它当做一个简化的IDE使用。即使你不熟悉,相比于IDE和Notebook,他对于你测试一些小方法和快速做一些实验也是非常便捷的工具。