我想这是一个普遍的问题,如果不能在正确的位置发布,抱歉。
比如说,我有一个a
import的函数os
。如果我要多次从另一个文件调用此函数,我是否假设导入也将多次进行?有没有办法仅在模块不存在时才导入?
基本上,我有一个类,它调用从各个文件导入的多个函数,而不是导入整个文件,我认为仅导入该函数会更容易,但是现在我想知道从长远来看是否会令自己头痛进口过多。
正如描述的蟒蛇文档中,当蟒蛇看到它下面的一些事情的import语句:
import foo
模块的名称foo
将是foo
import foo as bar
模块的名称foo
将是bar
from foo import bar as baz
python ,则bar
在模块中查找函数(或其他函数)foo
并将该函数绑定到namebaz
因此,每个模块仅导入一次。
为了更好地理解导入机制,我建议创建一个玩具示例。
档案module.py
:
print("import is in progress")
def foo():
pass
档案main.py
:
def foo():
print("before importing module")
import module
module.foo()
print("after importing module")
if __name__ == '__main__':
foo()
foo()
将以上文件放入同一目录。当module.py
正在导入它打印import is in progress
。启动时main.py
,它将尝试module
多次导入,但输出将是:
before importing module
import is in progress
after importing module
before importing module
after importing module
因此导入实际上只发生一次。您可以调整此玩具示例以检查您感兴趣的案例。
问题内容: 在Ruby中,我没有重复很多次“ require”(在Python中为“ import”)一词,而是 因此,它将遍历每个“ lib”和“ require”(导入)的集合。现在,我正在编写Python脚本,我想做类似的事情。是否有办法为所有这些人写“导入”。 简单的“引导”将类似于以下代码。无论如何,由于Python不会导入命名为字符串的库,因此它不起作用。 提前致谢 问题答案: 对于已
问题内容: 我一直想知道这一点:是否可以保证多次导入模块都是安全的?当然,如果模块执行操作系统之类的操作,例如写入文件之类的东西,则可能不会,但是对于大多数简单模块而言,简单地随意执行导入是否安全?是否有规范模块全局状态的约定? 问题答案: 是的,无论它是什么模块,您都可以在一个Python程序中进行任意多次。在第一个之后的每个后续访问访问缓存的模块,而不是重新评估它。
我看过这些网站: python相对导入示例代码不起作用 第十亿次相对进口 https://peps.python.org/pep-0328/ Python包:相对导入 Python中的相对导入 并且加载了更多我没有展示的内容,但是它们(答案/代码)由于某种原因无法相对导入其他Python“模块”。而且,我总是有这样一个永远重复出现的错误:< code>ImportError:在没有已知父包的情况下
问题内容: 存在的问题是:在Windows 7、32位Python 2.7.3中,如何解决此“尝试以非软件包方式进行相对导入”消息?我在上构建了该软件包的精确副本: 导入是从控制台完成的。 我确实在相应的模块中创建了名为垃圾邮件和鸡蛋的函数。自然,它不起作用。答案显然是在我列出的第4个网址中,但对我来说都是校友。我访问的其中一个URL上有此响应: 相对导入使用模块的名称属性来确定该模块在包层次结构
问题内容: 据我了解,python模块永远不会导入两次,即该模块中的代码仅在首次导入时才执行。随后的import语句只需将模块添加到导入范围即可。 我有一个名为“ TiledConvC3D.py”的模块,但似乎已多次导入。我使用pdb在该模块的代码顶部打印堆栈。 这是从第一次执行模块开始的堆栈跟踪的结尾: 它将继续执行多次。但是,第二次调用的完整堆栈跟踪不会显示对的任何调用,因此不应执行这些执行:
效率不是很高。