在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中的定义,我将得到一个错误,如:

名称错误:名称"foo"未定义

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

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

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

foo名称在main.py中导入。foo在main_functions.py模块中不可用,因为您尚未在该模块中导入它。请参阅带有模块导入的命名空间,了解它为什么以这种方式工作的更多信息。

执行所需操作的一种方法是将foo作为参数提供给bar()。示例:

main.py:

from secondary_functions import foo
from main_functions import bar 
bar(foo)

main_functions.py:

def bar(foo):
return foo()

secondary_functions.py:

def foo():
return 1

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

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

问题似乎不是正确调用文件,而是你没有正确调用pippo,如果pippo是一个全局变量,那么我不明白它为什么不起作用。我能想到的解决这个问题的唯一方法是说file.pippo

如果你要有多个文件,其中包含一个名为pippo的变量,那么最好不要像我刚才向你展示的那样,让它们全局调用,然后单独调用。

另一个可能的问题是,如果你在一个函数中定义pippo,那么它只会成为该函数的局部变量。

我能想到的最后一个问题是,如果你在main_functions中使用它们,而它们还没有在main_ffunction中定义,并且你没有将文件导入main_function,即 # in main_functions.py
import secondary_functions

那么我不认为main_functions能够找到函数和变量,而不让它们成为你正在使用的函数的参数。或者,你可以做一些类似file.pippo的事情

最新更新