python - 如何在另一个导入包中使用一个变量而不再次运行该文件
问题描述
我有一个烧瓶应用程序,我已将代码拆分为多个 python 文件,每个文件专用于整个程序的特定部分(db、login、admin 等)。大多数文件都有某种设置代码来创建它们各自的模块对象,该对象必须能够访问我的主文件中定义的 Flask 对象。一些模块还需要访问其他模块中的变量,但是在导入它们时,它们会再次运行,即使它们已经在 main 中导入。
以下代码是该问题的一个示例。
如果我有这样的 main.py
import foo
import bar
if __name__ == "__main__":
foo.foofunc()
foo.py
import bar
@bar.barable
def foo(string):
print(string)
和 bar.py
import foo
foo.foo("hello")
def barable(fun):
def r(*args, **kwargs):
print("this function is completely unbarable")
func(*args, **kwargs)
这段代码不起作用,因为 foo 导入了 bar,而后者又导入了运行 bar.barable 的 foo,而 bar.barable 尚未定义。
在这种情况下(假设调用 foo.foo 是必要的),我唯一的选择是将 bar.barable 从 bar 提取到单独的模块中,还是有其他方法可以解决这个问题?
我知道在 python 中导入一个模块会运行该文件,但是有没有办法将一些代码放入相同的检查中,__name__ == "__main__"
但要检查它是否由 main 而不是另一个模块导入?
解决方案
推荐阅读
- javascript - 如何从表单序列化中排除按钮和标签?
- javascript - compiler.js:2430 未捕获的错误:模块“AppModule”导入的意外值“未定义”
- python - 如何将输入单词用作整数
- javascript - 如何忽略 JavaScript 中 require 的多个返回值之一?
- python - 具有多个输入的 Keras 顺序模型
- regex - 这个正则表达式的输出是什么
- python - Scrapy 通过 POST 方法迭代
- batch-file - 如何在具有带空格的用户名的批处理文件中写入完整路径?
- swift - iPad Playground 有不同的 View.Frame
- node.js - mongodb连接池在node这样的单线程环境中有什么好处?