首页 > 解决方案 > 在python中导入files.py的问题

问题描述

我认为这是一个非常基本的问题,但我找不到任何东西。抱歉,如果这恰好是重复的。

我有一个定义了一些函数的文件,我们称之为这个文件main_functions.py

在这个文件中,我依赖一个函数,我们可以调用它foo()。例如,在文件中main_functions.py我们可以有这样的东西:

def bar():
    return foo()

foo()在另一个文件中定义,称为secondary_functions.py

def foo():
    return 1

现在,在我的main脚本中,我想导入一个可以定义的文件foo(),然后执行以下操作:

from secondary_functions import *    # Here I define foo()
from main_functions import *  

bar()

如果这样做,内部的函数main_functions将无法找到 中存在的定义,secondary_functions我将收到如下错误:

NameError:名称'foo'未定义

解决这个问题对我来说非常重要。

我的目标是能够拥有不同的文件,称为secondary_functions1.py, secondary_functions2.py, eccetera, 的定义foo()

而且,为了解决这个问题,我不想每次都更改依赖于这些定义的文件,例如每次插入类似import secondary_functionsX.py的东西,这样可以解决问题。我只想更改主脚本。

标签: pythonpython-import

解决方案


在 import 语句之后,变量 likepippo已经成为主程序范围内的全局变量。但是全局变量不会被导入的模块继承。模块应该能够作为独立的单元独立存在,可以由任何程序导入;想象一下,如果他们开始使用来自任何导入它们的变量,会出现什么问题......

因此,做到这一点的唯一方法是显式地“给予”模块的值,例如作为附加的函数参数。您可以将所有内容main_functions.py放在一个类中,然后让您的主脚本将所需的全局变量作为其init构造函数的参数提供给它,以便它可以存储它们以供bar()其他方法使用。


推荐阅读