我创建了一个名为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模块名称放在本地命名空间中。谁能帮我理解一下。
谢谢!
假设mod
是一本书,printme.py
是一个章节。
当你命令import mod.printme
时,你是在对python说"嘿!请带模书和它的printme章节作为一个完整的书,并删除其他章节。现在,当你需要引用这本书的内容时,你需要说mod.printme.foo()
,因为你的新书的名字是mod
,它只有一章printme
。
当你指挥from mod import printme
时,你在说:"嘿!请带打印我章节在mod书作为一本书本身。现在,当你需要引用这本书的内容时,你需要说printme.foo()
,因为章节已经变成了一本书,所以只需要书名,在你的情况下,printme
,需要。
如果你想让Python把printme
章的所有标题带到你的书中(你正在写的书,在Python中每个文件都是一个模块),你可以使用from mod.printme import *
。它将只显示所有标题。所以你不需要引用book/chapter
,只要foo()
就可以了。
它们是这样工作的,因为它们是这样工作的。