首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于 import,3个重要但冷门的知识点

大家好,欢迎来到 Crossin的编程教室 !

在 python 中通过 import 导入模块是我们写代码时必不可少的操作。不过,这其中还有一些很细节的知识点,可能大家平常没有专门注意过。今天我们就来分享其中的3个。

1. 使用 __all__  控制可被导入的变量

使用  默认情况下会导入 module 里的所有变量,若你只想从模块中导入其中几个变量,可以在 module 中使用 来控制想要被其他模块导入的变量。

打开 python console 验证一下

仅对于使用  这种情况适用。

它经常在一个包的 中出现。

2. 命名空间包的神奇之处

命名空间包,对于不少人来说,可能是一个陌生的名字。

与我们熟悉的常规包不同的是,它没有 文件。

更为特殊的是,它可以跨空间地将两个不相邻的子包,合并成一个虚拟机的包,我们将其称之为 。

例如,一个项目的部分代码布局如下

在这2个目录里,都有着共同的命名空间spam。在任何一个目录里都没有__init__.py文件。

让我们看看,如果将foo-package和bar-package都加到python模块路径并尝试导入会发生什么?

当一个包为命名空间包时,他就不再和常规包一样具有 属性,取而代之的是

3. 模块重载中的一个坑

由于有 sys.modules 的存在,当你导入一个已导入的模块时,实际上是没有效果的。

为了达到模块的重载,有的人会将已导入的包从 sys.modules 中移除后再导入

就像下面这样子

上面的例子里我使用的是 ,如果你使用的是   这种导入形式,会发现重载是同样是无效的。

这应该算是一个小坑,不知道的人,会掉入坑中爬不出来。

因此,在生产环境中可能需要避免重新加载模块。而在调试模式中,它会提供一定的便利,但你要知道这个重载的弊端,以免掉入坑里。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210308A0626R00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券