python module是干什么的_module和package是什么

module

module即是模块,在python中指一个.py文件

package

package(包),在python中为了避免多个.py文件名重复,而把他们分开,所用的一种目录结构

例如:在一个helloapp包下面写了test.py文件,那么在别的地方依然可以写一个命名为test的.py文件,有一点需要注意的是,包必须要有__init__.py文件,init.py文件指的就是helloapp目录名,和普通目录不同的是,一个包作为一个命名空间。

helloapp

├─ init.py

├─ abc.py

└─ test.py

普通目录当然也可以导入文件,但是缺失__init__.py文件使得在导入包的时候会发生有趣的事情:这并没有产生错误,解释器创建了一个由所有包含匹配包名的目录组成的列表。特殊的包命名空间模块被创建,只读的目录列表副本被存储在其__path__变量中。 举个例子:

6276ef75a231f96cfe1dea34431f91b4.png

如果将myC和myD都加到python模块路径并尝试导入会发生什么

>>> import sys

>>> sys.path.extend(['myC','myD'])

>>> import spam.blah

>>> import spam.grok

>>>1

2

3

4

5

直接可以导入了,此时spam被看做一个命名空间(亲测无效,本人在测试时,并不能这样导入,之所以这么写是因为python3-cookbook书上是这么写的。链接https://python3-cookbook.readthedocs.io/zh_CN/latest/c10/p05_separate_directories_import_by_namespace.html)

>>> import spam

>>> spam.__path__

_NamespacePath(['myD\\spam','myC\\spam'])

>>>1

2

3

4

可以用__file__属性测试,一个包是否被作为一个包命名空间的主要方法是检查其__file__属性。如果没有,那包是个命名空间。

>>> spam.__file__

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'module' object has no attribute '__file__'

>>> spam

>>>1

2

3

4

5

6

7

命名空间

多个命名空间中可以有相同的名字,一个命名空间中,目录名或文件名不能相同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值