导入软件包时出现意外行为

开始

我在python中出现了意外的导入行为,我不理解。希望您能帮助我澄清这种现象。假设以下项目结构:

.
└── pkgimp
    ├── __init__.py
    └── testing
        ├── __init__.py
        ├── mod_a.py
        └── mod_b.py

具有以下源代码:

pkgimg / __ init__.py

import pkgimg.testing

pkgimg / testing / __ init__.py

from mod_a import a
from mod_b import b # <- no import of c

pkgimg / testing / mod_a.py

a = 123

pkgimg / testing / mod_b.py

b = "foo"
c = "bar" # <- not imported

当我导入软件包import pkgimp并打印加载的模块时,dir(pkgimp.testing)我看到了模块mod_amod_b而我没有导入?

这是我得到的:

['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'a', 'b', 'mod_a', 'mod_b']

我以为只是a并且b将是导入的,既不是mod_a也不是mod_b

此外,我还可以访问c从未导入过的文件。

>>> pkgimp.testing.mod_b.c
'bar'

我知道,如果将模块中的所有内容导入,都将对其进行评估。但是,我认为使用from M import x只会给我提供参考,x而不是整个模块!

例如,当我运行以下代码时:

>>> from pkgimp.testing.mod_b import b
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'b']

Python仅导入b而不导入module mod_b这是我所期望的。

马丁·彼得斯(Martijn Pieters)

包中的模块一旦导入,就始终作为包的属性添加。

因此,pkgimp.testing.mod_b 从任何其他模块导入时,都会mod_b在其中添加一个名称pkgimp.testing这是正常的行为。

在上一个示例中,您从模块中将特定名称导入了本地名称空间。如果您要检查mod_b模块,sys.modules['pkgimp.testing.mod_b']您会发现模块c仍在该对象上定义;整个模块将被加载到内存中,并且对它的引用将b添加到您的本地名称空间中。

在那种情况下,sys.modules['pkgimp.testing']也会有一个mod_b属性,该属性是对pkgimp.testing.mod_b模块对象的引用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递异步操作时出现意外行为

来自分类Dev

创建字典时出现意外行为

来自分类Dev

从istringstream读取字符时出现意外行为

来自分类Dev

在python中修改字典时出现意外行为

来自分类Dev

在Python中加载模块时出现意外行为

来自分类Dev

使用strcat附加字符时出现意外行为

来自分类Dev

使用重定向操作时出现意外行为

来自分类Dev

从 stdin 读取输入参数时出现意外行为

来自分类Dev

在新软件包中使用Python软件包“ click”时,导致“错误:出现意外的额外参数(sdist bdist_wheel)”

来自分类Dev

在ggplot上为矩形图层设置Alpha比例时出现意外行为

来自分类Dev

制作尺寸相似的2D数组时出现意外行为

来自分类Dev

当对文件中的字符使用迭代器时,scala中出现意外行为

来自分类Dev

在R中匹配'+'时在pmatch中出现意外行为

来自分类Dev

XML到JSON-转换列表时出现意外行为?

来自分类Dev

使用fakeAsync(),NgModel和detectChanges()进行测试时出现意外行为

来自分类Dev

使用“ import * as”并进行销毁时出现意外行为

来自分类Dev

熊猫:分组后跟聚合-连接字符串时出现意外行为

来自分类Dev

在使用sqlcmd调用的脚本中使用SET NOEXEC ON时出现意外行为

来自分类Dev

使用tee复制迭代器时出现意外行为

来自分类Dev

在R中匹配'+'时在pmatch中出现意外行为

来自分类Dev

制作尺寸相似的2D数组时出现意外行为

来自分类Dev

按行名索引data.frame时出现意外行为

来自分类Dev

JTable:在最后一项下单击时出现意外行为

来自分类Dev

XML到JSON-转换列表时出现意外行为?

来自分类Dev

通过MemoryStream下载生成的Excel文件时出现意外行为

来自分类Dev

在Java中使用日历类型时出现意外行为

来自分类Dev

在if()块中分配多个变量时出现意外行为

来自分类Dev

在Python中使用OpenCV重映射时出现意外行为

来自分类Dev

在 C# 中固定对象时出现意外行为

Related 相关文章

  1. 1

    传递异步操作时出现意外行为

  2. 2

    创建字典时出现意外行为

  3. 3

    从istringstream读取字符时出现意外行为

  4. 4

    在python中修改字典时出现意外行为

  5. 5

    在Python中加载模块时出现意外行为

  6. 6

    使用strcat附加字符时出现意外行为

  7. 7

    使用重定向操作时出现意外行为

  8. 8

    从 stdin 读取输入参数时出现意外行为

  9. 9

    在新软件包中使用Python软件包“ click”时,导致“错误:出现意外的额外参数(sdist bdist_wheel)”

  10. 10

    在ggplot上为矩形图层设置Alpha比例时出现意外行为

  11. 11

    制作尺寸相似的2D数组时出现意外行为

  12. 12

    当对文件中的字符使用迭代器时,scala中出现意外行为

  13. 13

    在R中匹配'+'时在pmatch中出现意外行为

  14. 14

    XML到JSON-转换列表时出现意外行为?

  15. 15

    使用fakeAsync(),NgModel和detectChanges()进行测试时出现意外行为

  16. 16

    使用“ import * as”并进行销毁时出现意外行为

  17. 17

    熊猫:分组后跟聚合-连接字符串时出现意外行为

  18. 18

    在使用sqlcmd调用的脚本中使用SET NOEXEC ON时出现意外行为

  19. 19

    使用tee复制迭代器时出现意外行为

  20. 20

    在R中匹配'+'时在pmatch中出现意外行为

  21. 21

    制作尺寸相似的2D数组时出现意外行为

  22. 22

    按行名索引data.frame时出现意外行为

  23. 23

    JTable:在最后一项下单击时出现意外行为

  24. 24

    XML到JSON-转换列表时出现意外行为?

  25. 25

    通过MemoryStream下载生成的Excel文件时出现意外行为

  26. 26

    在Java中使用日历类型时出现意外行为

  27. 27

    在if()块中分配多个变量时出现意外行为

  28. 28

    在Python中使用OpenCV重映射时出现意外行为

  29. 29

    在 C# 中固定对象时出现意外行为

热门标签

归档