点击上方“AI派”,选择“加为星标”
第一时间关注Python技术干货!
AI派在读学生小姐姐Beyonce
Java实战项目练习群
长按识别下方二维码,按需求添加

扫码添加Beyonce小姐姐

扫码关注
进Java学习大礼包

作者:写代码的明哥
来源:Python编程时光
1. 使用 __all__ 控制可被导入的变量
使用 from module import * 默认情况下会导入 module 里的所有变量,若你只想从模块中导入其中几个变量,可以在 module 中使用 __all__ 来控制想要被其他模块导入的变量。
# profile.py
name='小明'
age=18
__all__=['name']
打开 python console 验证一下
>>> from profile import *
>>> print(name)
小明
>>> print(age)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
__all__ 仅对于使用from module import * 这种情况适用。
它经常在一个包的 __init__.py 中出现。
2. 命名空间包的神奇之处
命名空间包,对于不少人来说,可能是一个陌生的名字。
与我们熟悉的常规包不同的是,它没有 __init__.py 文件。
更为特殊的是,它可以跨空间地将两个不相邻的子包,合并成一个虚拟机的包,我们将其称之为 命名空间包。
例如,一个项目的部分代码布局如下
foo-package/
spam/
blah.py
bar-package/
spam/
grok.py
在这2个目录里,都有着共同的命名空间spam。在任何一个目录里都没有__init__.py文件。
让我们看看,如果将foo-package和bar-package都加到python模块路径并尝试导入会发生什么?
>>> import sys
>>> sys.path.extend(['foo-package', 'bar-package'])
>>> import spam.blah
>>> import spam.grok
>>>
当一个包为命名空间包时,他就不再和常规包一样具有 __file_ 属性,取而代之的是 __path__
>>> import sys
>>> sys.path.extend(['foo-package', 'bar-package'])
>>> import spam.blah
>>> import spam.grok
>>> spam.__path__
_NamespacePath(['foo-package/spam', 'bar-package/spam'])
>>> spam.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'
3. 模块重载中的一个坑
由于有 sys.modules 的存在,当你导入一个已导入的模块时,实际上是没有效果的。
为了达到模块的重载,有的人会将已导入的包从 sys.modules 中移除后再导入
就像下面这样子
>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> sys.modules['foo.bar']
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>
>>> del sys.modules['foo.bar']
>>>
>>> import foo.bar
successful to be imported
上面的例子里我使用的是import foo.bar ,如果你使用的是 from foo import bar 这种导入形式,会发现重载是同样是无效的。
这应该算是一个小坑,不知道的人,会掉入坑中爬不出来。
>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> del sys.modules['foo.bar']
>>> from foo import bar
>>>
因此,在生产环境中可能需要避免重新加载模块。而在调试模式中,它会提供一定的便利,但你要知道这个重载的弊端,以免掉入坑里。
文末福利
各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。
这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的Beyonce小姐姐
一定要备注【高清图】哦
????????????????????

➕我们的Beyonce小姐姐微信要记得备注【高清图】哦
来都来了,喜欢的话就请分享、点赞、在看三连再走吧~~~


1277

被折叠的 条评论
为什么被折叠?



