Python中的包详解

一:引入包

1. 若两个模块功能有联系

2. 将其放到同一个文件夹下(msg)

3. 使用import 文件.模块 的方式导入

4. 使用from 文件夹 import 模块 的方式导入

在这里插入图片描述

5. 在msg文件夹下创建__init__.py文件

6. 在__init__.py文件中写入内容(all

7. 重新使用from 文件夹 import 模块 的方式导入

8. 总结

  • 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包
  • 有效避免模块名称冲突问题,让应用组织结构更加清晰

二:init.py 文件的作用

init.py 控制着包的导入行为

1. init.py为空

仅仅是把这个包导入,不会导入包中的模块

2. all

在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import *时导入的模块

3. 可以在__init__.py文件中编写内容

可以在这个文件中编写语句,当导入时,这些语句就会被执行

三:嵌套的包

假定我们的包的例子有如下的目录结构:

Phone/
    __init__.py
    common_util.py
    Voicedta/
        __init__.py
        Pots.py
        Isdn.py
    Fax/
        __init__.py
        G3.py
    Mobile/
        __init__.py
        Analog.py
        igital.py
    Pager/
        __init__.py
        Numeric.py

Phone 是最顶层的包,Voicedta 等是它的子包。 我们可以这样导入子包:

import Phone.Mobile.Analog
Phone.Mobile.Analog.dial()

你也可使用 from-import 实现不同需求的导入
第一种方法是只导入顶层的子包,然后使用属性/点操作符向下引用子包树:

from Phone import Mobile
Mobile.Analog.dial('555-1212')

此外,我们可以还引用更多的子包:

from Phone.Mobile import Analog
Analog.dial('555-1212')

事实上,你可以一直沿子包的树状结构导入:

from Phone.Mobile.Analog import dial
dial('555-1212')

在我们上边的目录结构中,我们可以发现很多的__init__.py文件。这些是初始化模块,from - import语句导入子包时需要用到它。 如果没有用到,他们可以是空文件。

包同样支持 from - import all 语句:

from package.module import *

然而,这样的语句会导入哪些文件取决于操作系统的文件系统。所以我们在__init__.py 中加入 __all__ 变量。该变量包含执行这样的语句时应该导入的模块的名字。它由一个模块名字符串列表组成.。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值