JupyterNotebook‘s Magic

简介: JupyterNotebook‘s Magic

640.jpg

事情的起因是这样子的:

上个星期在看代码的时候,一个意外让我了解到了jupyternotebook上的黑魔法。是这样子的:

640.png


这么骚?可以这么玩?

代码上面直接加了个%%time(具体这个百分号是一个还是两个我还没搞清楚,别人敲的是两个,我敲两个就报错,敲一个就OK,具体情况就需要你们在jupyter上试试了),这样可以算出代码的耗时。

我在python上试了试,报错,不行,后来去了jupyter上面发现是OK的,也就说这个统计耗时的黑魔法只能在jupyter上运行???

我们一般统计耗时都是使用结束时间减去开始时间的:

st = time.time()
task_mail(self)
end = time.time()
print("任务使用耗时", end - st)


但是有了jupyter后,这一切都变了:

一个百分号解决问题。

如果我们想计算一个循环的耗时,可以这么写:640.png


输出:

CPU times: user 4 ms, sys: 0 ns, total: 4 ms
Wall time: 5.6 ms


除了这个,jupyter还有一个叫timeit的东西,这个东西就更不得了了,它能细算到每一步的耗时!

我们来看看:

640.png

输出结果:

3.3 ms ± 171 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

惊呆了!他能把循环每一步的耗时都清楚的计算出来!!!精确到微秒级!!


但是其实按照结果来看,这两者之间的结果并不一致,这是为什么呢?


大家都知道,python是有垃圾回收机制的,而这个垃圾回收机制是占用耗时的。而timeit()会在计时期间暂时关闭垃圾回收机制,所以耗时也就更短。


%真是神奇,这是为什么呢?

Magic 关键字是可以在单元格中运行的特殊命令,能让你控制 notebook 本身或执行系统调用(例如更改目录)。

又例如,在 notebook 中可以使用 %matplotlib 将 matplotlib 设置为以交互方式工作。

640.png


输出:

640.png

notebook 允许将图像与文本和代码一起嵌入。在使用 matplotlib 或其他绘图包创建可视化内容时很有用。

在 notebook 中可以使用 %matplotlib 将 matplotlib 设置为以交互方式工作。默认情况下,图形呈现在各自的窗口中。但是,你可以通过命令传递参数,以选择特定的“后端”(呈现图像的软件)。要直接在 notebook 中呈现图形,应将通过命令 %matplotlib inline 内联后端一起使用。



Magic 命令的前面带有一个或两个百分号(% 或 %%),分别对应行 Magic 命令和单元格 Magic 命令。行 Magic 命令仅应用于编写 Magic 命令时所在的行,而单元格 Magic 命令应用于整个单元格。


对于 Python 内核,可以使用 Magic 命令 %pdb


640.png


来看看还有哪些其他的%魔法吧!



%alias

为系统命令定义别名。

' %alias alias_name cmd '将' alias_name '定义为' cmd '的别名

然后,输入' alias_name params '将执行系统命令' cmd params '(从您的底层操作系统)。

别名的优先级低于magic函数和Python普通变量,因此如果“foo”既是Python变量又是别名,那么别名在“del foo”删除Python变量之前不能执行。


%autoawait

允许更改自动等待选项的状态。

这允许设置特定的异步代码运行器。

如果没有传递值,请打印当前使用的异步集成以及它是否被激活。


%autocall

使函数可调用,而不必键入括号。


%bookmark

管理IPython的书签系统。


%cd

和shell命令一样,更改当前的工作目录


%conda

安装包使用的(类似于!pip install [pkgs])

%conda install [pkgs]


%debug

激活交互式调试器。

这个神奇的命令支持两种激活调试器的方法。一种是在执行代码之前激活调试器。通过这种方式,您可以设置断点,从该点开始逐步执行代码。可以使用此模式,方法是提供要执行的语句和一个断点。

另一种方法是在死后模式下激活调试器。您可以激活此模式,只需运行%debug而不带任何参数。如果一个异常刚刚发生,这允许您交互式地检查它的堆栈帧。注意,这将始终只在发生的最后一次回溯上工作,所以必须在希望检查的异常触发之后快速调用这个函数,因为如果发生了另一个异常,它会重击前一个异常。


%dirs

返回到当前的目录。


%env

获取或设置环境变量。


还有很多就不一一介绍了,大家可以看看API文档:

https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-autoawait


点击原文可以直达哦!

相关文章
|
7天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
18天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1327 8
|
5天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
307 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
17天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1401 87
|
4天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
5天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
306 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
6天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
239 82
2025年阿里云域名备案流程(新手图文详细流程)