当前位置: 首页 > news >正文

【jupyter notebook】jupyter notebook 调用另一个jupyter notebook 的函数

总结

使用 %run 魔法命令将 Notebook 转换为py文件使用 nbimporter手动复制代码
优点notebook最前面加上即可最基本方法就跟导入py文件一样,不会被执行一遍
缺点所有的代码都会执行一遍修改原文件就要重新转换,且 从自定义的 .py 文件中导入函数时,Python 会执行该文件中的顶层代码。需要安装库麻烦
最佳

方法 1:使用 %run 魔法命令

Jupyter Notebook 提供了 %run 魔法命令,允许你运行另一个 Notebook,其效果类似于 Python 脚本。运行后,你可以访问那个 Notebook 中定义的变量、函数等。

在目标 Notebook 中,确保你已经定义了需要的函数,例如:

# 在 some_other_notebook.ipynb 中
def my_function():print("Hello from another notebook!")

然后,在你的当前 Notebook 中,使用 %run 来执行另一个 Notebook:

# 在你的当前 Notebook 中
%run ./path_to/some_other_notebook.ipynb# 现在可以调用函数
my_function()  # 这将打印 "Hello from another notebook!"

确保路径是相对于当前 Notebook 的路径或者是一个绝对路径。

方法 2:将 Notebook 转换为模块

另一种方法是将你想要调用的 Notebook 转换为一个 Python 模块(.py 文件),然后像导入普通 Python 模块那样导入它。

首先,将 Notebook 导出为 Python 脚本。这通常可以在 Jupyter Notebook 的 “File” > “Download as” > “Python (.py)” 中完成。

将导出的 .py 文件放在当前 Notebook 可以访问的位置(或添加该路径到 sys.path)。

导入模块并调用函数:

# 导入模块
import some_other_notebook_module  # 确保 some_other_notebook_module.py 在可访问的路径上# 调用函数
some_other_notebook_module.my_function()

两种方法各有利弊:使用 %run 更适合临时或交互式的工作,而将 Notebook 转换为模块则更适合长期和重复使用的代码。选择哪种方法取决于你的具体需求和工作流程。

注意!

从自定义的 .py 文件中导入函数时,Python 会执行该文件中的顶层代码。这意味着在模块级别(不在任何函数或类定义内部)的所有语句都会在导入时运行。这包括函数和类的定义、变量赋值,以及任何在顶层执行的其他语句。

防止代码在导入时运行

如果你想防止某些代码在模块被导入时执行,可以将这部分代码放入以下检查中:

if __name__ == "__main__":# 这里的代码只会在直接运行此脚本时执行,而不会在导入时执行

这种方式常用于模块的测试代码或当脚本既可以被导入又可以作为主程序运行时。

方法 3:使用 nbimporter

nbimporter 是一个 Python 库,允许直接从其他 Jupyter Notebook 中导入 Python 代码。首先,您需要安装 nbimporter:

pip install nbimporter

然后,您可以在您的 Notebook 中导入另一个 Notebook,就像导入一个常规的 Python 模块一样:

import nbimporter
from some_other_notebook import my_functionmy_function()

在这个示例中,some_other_notebook 是您要导入的 Notebook 的文件名(不包括 .ipynb 扩展名),my_function 是定义在该 Notebook 中的函数。

方法 4:手动复制代码

对于较小的项目或临时工作,最简单直接的方法可能就是手动复制所需的函数或代码段。这种方法虽然不够优雅,但对于快速实验和原型设计来说是有效的。

http://www.lryc.cn/news/263027.html

相关文章:

  • Linux--学习记录(3)
  • 自然语言处理阅读第一弹
  • Spring Boot+Mybatis设置sql日志打印
  • 步进电机电流设置的3种方法
  • uniapp-使用返回的base64转换成图片
  • 有机面条市场分析:到2026 年的复合年增长率为 5.4%
  • 广州设计周落幕|值得被歌颂的奥力斯特岩板
  • WTN6系列语音芯片:PWM与DAC音频输出在PCB设计中的优势
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)
  • Docker介绍,Docker安装
  • CLIP 对比学习 源码理解快速学习
  • 6.鸿蒙app_hap_DevEco如何真机调试模式_app安装在手机中
  • 【JVM从入门到实战】(八)垃圾回收(1)
  • LeeCode前端算法基础100题(12)-删除有序数组中的重复项
  • MATLAB图解傅里叶变换(初学者也可以理解)
  • uni-app 用于开发H5项目展示饼图,使用ucharts 饼图示例
  • 回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)
  • JDK bug:ciObjectFactory::create_new_metadata
  • Flink系列之:Over聚合
  • Java开发工具积累(符合阿里巴巴手册规范)
  • SiLM5350MDBCA-DG车规级隔离驱动芯片,我们能为汽车智能提供什么?
  • 【开题报告】基于SpringBoot的企业财务管理系统的设计与实现
  • 【C盘清理】Jetbrains全家桶(PyCharm、Clion……)更改 IDE 特定文件(配置、缓存、插件、日志等)存储位置
  • nginx部署vue项目
  • Relocations for this machine are not implemented,IDA版本过低导致生成汇编代码失败
  • [ CTF ]【天格】战队WriteUp-第七届“强网杯”全国安全挑战赛
  • Android13音频录制适配
  • 【Python】—— 如果使用matplotlib做数据可视化
  • 【MyBatis-Plus】多数据源分页配置(低版本暂时就支持一种(可选),高版本多支持)
  • Linux 特殊符号