Python 导入模块方法

Python import module approaches

提问人:user3103957 提问时间:1/5/2023 更新时间:1/5/2023 访问量:73

问:

我创建了一个名为 mod 的包,并在其中放置了一个 python 文件(又名:module)。python 文件的名称为 printme.py。

我通过以下几种方式导入模块。

import mod.printme 

 ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'mod']

执行此操作后,命名空间将附加值 mod。 我希望它具有值 printme(这是实际的模块名称)

from mod import printme

['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'printme']

执行此操作后,将按预期正确地在命名空间中追加值 printme。

从技术上讲,两者都应该在本地命名空间中导入模块 printme,我有点困惑为什么第一种方法不是将 printme 模块名称放在本地命名空间中。

有人可以帮我理解吗?

谢谢!

python import module 命名空间

评论

2赞 hiro protagonist 1/5/2023
在第一个版本中,您必须将模块中的所有函数作为 - 因此需要可供 Python 访问。在第二个版本中,您将调用 - 这里只需要定义名称。mod.printme.function()modprintme.function()printme

答:

1赞 madhurkant 1/5/2023 #1

假设是一本书和一章。modprintme.py

当你命令时,你是在对 python 说“嘿!请带上mod书和它的printme章节作为整本书,并删除其他章节”。现在,每当你需要参考这本书的内容时,你都需要说出你的新书的名字,它只有一章。import mod.printmemod.printme.foo()modprintme

当你命令你说:“嘿!请把 mod 书中的章节打印给我,作为一本书本身”。现在,每当你需要引用本书的内容时,你都需要说,因为这一章已经变成了书,所以只需要书名,在你的情况下,是需要的。from mod import printmeprintme.foo()printme

如果你想让 Python 在你当前的书中(你正在写的书,就像在 Python 中每个文件都是一个模块一样)中带来所有章节的标题,你可以使用 .它将仅带来所有标题。所以你不需要引用 ,就可以了。printmefrom mod.printme import *book/chapterfoo()

他们以这种方式工作,因为他们被赋予了这种方式。

评论

2赞 madhurkant 1/5/2023
但是,不要使用,因为它会使命名空间变得一团糟。请改用from mod.printme import *from mod.printme import foo
0赞 user3103957 1/6/2023
以更好的方式理解这个概念是一个很好的类比。感谢您抽出宝贵时间研究这个问题。