我对python很新,而且我一直专门使用Jupyter笔记本。当我需要运行.py文件时,我已经在计算机中保存了一些我通常所做的只是使用魔术命令%run
%run '/home/cody/.../Chapter 3/efld.py'
%run '/home/cody/.../Chapter 5/tan_vec.py'
然后在下一个单元格中,我可以毫无问题地运行efld.py。但tan_vec.py使用efld.py,看起来像这样,
def tan_vec(r):
import numpy as np
#Finds the tangent vector to the electric field at point 'r'
e = efld(r)
e = np.array(e) #Turn 'e' into a numpy array so I can do math with it a little easier.
emag = np.sqrt(sum(e**2)) #Magnitude of the
return e / emag
当我尝试运行时,我收到了错误;
"NameError: name 'efld' is not defined."
我尝试了大部分事情here,但没有一个接缝工作。
我是否打算在笔记本中运行py文件错误?有没有更好的方法在笔记本中运行/调用py文件? 如何使我能在另一个py文件中运行一个py文件?
修改
谢谢大家的帮助!我只是想添加最终的代码,以防万一有人遇到这个问题,并希望看到我做了什么。
def tan_vec(r):
#import sys
#sys.path.insert(0, '/home/cody/Physics 331/Textbook Programs/Chapter 3')
from efld import efld
import numpy as np
#Finds the tangent vector to the electric field at point 'r'
e = efld(r)
e = np.array(e) #Turn 'e' into a numpy array so I can do math with it a little easier.
emag = np.sqrt(sum(e**2)) #Magnitude of the
return e / emag
前两行已注释掉,因为仅当efld.py和tan_vec.py保存在不同的文件夹中时才需要它们。我刚刚将efld的副本添加到同一个文件夹和tan_vec中,我不再需要它们了。
再次感谢您的帮助!
答案 0 :(得分:2)
将文件放在jupyter根目录中。然后只需在第一个单元格的顶部导入这些文件(现在称为模块):
from efld import *
from tan_vec import *
如果需要另一个,请将导入放在相应文件的顶部,而不是jupyter。
鉴于这些模块本身不会抛出任何异常,您可以在所有其他单元格中调用其中的所有函数。
e = efld(r)
注意两个文件中的所有功能都以不同方式命名。
修改强>: 正如下面的评论中所指出的,您还可以直接导入您的功能:
from efld import efld as <whatever>
通过这种方式,您可以将功能重命名为<whatever>
,并且不必重命名名称相同的功能,位于不同的模块/文件中。