python中模块和包的区别

:Python中包和模块都可以被都是用import关键字进行引入的, 那么两者有什么区别呢?

模块: 一般来说, 单个py文件就叫模块(module), 调用这个模块直接使用"import 模块名"即可, 也可以使用"from 模块名 import 函数名/变量名/类名"和"from 模块名 import * "

: 当我们写了几个相近的py文件后, 想要集成起来给别人使用. 这时候就需要用到我们的包了.
包就是为了多个py文件打包起来访问的东西. 只要在包里面放一个init.py文件, 在init.py文件import包里面的模块(py文件), 就可以实现"import 包名", 实现对多个模块的调用.

下面我们举例说明一下就很容易清楚了:

  • import模块: 我们在debug文件中import module模块, 然后调用模块里面的fun函数. 两个文件在同个目录下
# module模块
def fun():
    print("hello world")
# debug
import module

module.fun()

运行程序代码:
image.png
可以看到, 正常导入module文件并调用函数, 下面我们看看调用包.

  • “import 包”: 我们需要导入模块1, 模块2的包(packet)
    文件结构如下:
    image.png
    模块代码如下:
# module1
def fun1():
    print("我是模块1的函数")

# module2
def fun2():
    print("我是模块2的函数")

# debug代码
import packet

packet.module1.fun1()

直接import packet的话试试, 然后调用packet.module1.fun1(), 发现程序报错了, AttributeError: module ‘packet’ has no attribute ‘module1’
image.png
这是因为python没法识别由多个py文件组成的包, 所以我们需要在包里面添加一个init.py文件. 在文件里面添加

import module1
import module2

文件结构如下:
image.png
重新运行代码,发现程序正常调用两个模块的内容, 也就是说成功import包
image.png
题外话: 如果不想在添加__init__.py是不是就没有办法访问module1和module2呢?
也不是, 利用在debug文件中引用时使用下面的语句也可以引用, 但它就不属于包结构了.包结构是含有__init__.py的文件夹, 而下面这种做法是属于导包中相对路径引用.

import packet.module1
import packet.module2

注:
作者:Python工匠
链接:https://www.jianshu.com/p/95afe2c3d526
来源:简书

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值