我认为这是一个非常基本的问题,但我什么都找不到。如果这恰好是重复的,很抱歉。
我有一个定义了一些函数的文件,让我们把这个文件称为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.py
、secondary_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
的事情