【问题标题】:python calling function from another file while using import from the main filepython从另一个文件调用函数,同时使用从主文件导入
【发布时间】:2021-10-21 23:46:24
【问题描述】:

我试图在我的编程中使用多个文件,但遇到了问题。

我有两个文件:main.py、nu.py

主文件是:

import numpy
import nu

def numarray():
    numpy.array(some code goes here)

nu.createarray()

nu 文件是:

def createarray():
    numpy.array(some code goes here)

当我运行 main 时出现错误:

文件“D:\python\nu.py”,第 2 行,在 createarray 中

numpy.array(这里有一些代码)

NameError: name 'numpy' 未定义

numpy 只是一个例子,我使用了大约六个导入。 据我所知,我必须在所有文件上导入所有模块,但这会造成某些模块无法加载两次的问题,它只是挂起。

我做错了什么以及如何在使用主文件中导入的模块时从另一个文件中正确导入函数?

希望我解释清楚。

感谢您的帮助!

【问题讨论】:

  • 使用包来处理循环导入(我猜你的问题是“挂起”)(你可以谷歌如何在 python 中创建包,这在 cmets 中没有解释)

标签: python import


【解决方案1】:

我在 python 领域有多年经验,从其他文件导入仍然很头疼..

这里的问题是您没有在"nu.py" 中导入numpy

但正如你所说,有时必须在所有文件中导入所有库有点烦人。

最后一件事是,你如何得到一个模块无法导入两次的错误?可以举个例子吗?

【讨论】:

  • 我正在编写一些控制 Razer 硬件的程序,该库正在使用 http 请求并将数据发送到某个端口上的 localhost(Razer API 的工作原理)。该连接仍然存在,当我从另一个文件运行相同的库时,它只是挂起,我猜它正在等待该端口空闲。
  • 嗯,在这种情况下你必须小心。您可以在一个脚本中解决对该库的所有调用。但如果你不能,可能你可以使用部分导入来解决这个问题:可能它只是一个导致问题的类,所以你创建该类的一个对象并且只在函数和模块之间传递相同的对象。前段时间我也遇到过类似的问题,我也读过 Singletons 来解决这个问题(不记得是怎么回事)
【解决方案2】:

如果您在每个单独的 python 脚本中使用模块,则需要将其导入才能访问。因此,您需要在 nu.py 脚本中“导入 numpy”,如下所示

如果可能,请尝试在脚本中保留对模块的使用,这样您就不会多次导入相同的内容,尽管这并不总是合适的

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2018-05-02
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多