Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在.py文件中使用.py文件_Python_Jupyter Notebook - Fatal编程技术网

Python 在.py文件中使用.py文件

Python 在.py文件中使用.py文件,python,jupyter-notebook,Python,Jupyter Notebook,我对python还相当陌生,我一直在专门使用Jupyter笔记本。当我需要运行一个.py文件时,我将它保存在我的计算机中的某个地方,我通常只需使用magic命令%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): imp

我对python还相当陌生,我一直在专门使用Jupyter笔记本。当我需要运行一个.py文件时,我将它保存在我的计算机中的某个地方,我通常只需使用magic命令%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."
大多数东西我都试过了,但都不管用

我在笔记本上运行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保存在不同的文件夹中时才需要它们。我只是在同一个文件夹和tan_vec中添加了一份efld,我不再需要它们了


再次感谢您的帮助

将文件放在jupyter根目录中。然后只需在第一个单元格顶部导入这些文件(现在称为模块):

from efld import *
from tan_vec import *
如果其中一个需要另一个,请将导入放在相应文件的顶部,而不是放在jupyter中

假设这些模块本身不抛出任何异常,那么您可以在所有其他单元中调用其中的所有函数

e = efld(r)
请注意,两个文件中的所有函数的名称都不同


编辑: 正如下面的评论所指出的,您也可以直接导入您的函数:

from efld import efld as <whatever>
从efld导入efld作为

通过这种方式,您可以将函数重命名为
,而不必重命名位于不同模块/文件中的同名函数。

听起来您应该在tan_vec顶部导入efld…@CodyBrown如果导入的脚本中有错误,将不会导入脚本@这是链接中建议的内容之一。我把import efld放在tan_vec的开头,但是我得到了一个错误,“TypeError:“module”对象不可调用”您想要导入函数,而不是模块。所以它看起来更像是tan_vec import tan_vec的
@CodyBrown最好不要把问题的答案放在问题本身中。如果您对现有答案不满意,请将其作为答案发布。
请注意,两个文件中的所有函数的名称都不同。
-如果您导入所需的特定内容而不是通配符,则该问题将消失。。。