问:Python中包和模块都可以被都是用import关键字进行引入的, 那么两者有什么区别呢?
模块: 一般来说, 单个py文件就叫模块(module), 调用这个模块直接使用"import 模块名"即可, 也可以使用"from 模块名 import 函数名/变量名/类名"和"from 模块名 import * "
包: 当我们写了几个相近的py文件后, 想要集成起来给别人使用. 这时候就需要用到我们的包了.
包就是为了多个py文件打包起来访问的东西. 只要在包里面放一个init.py文件, 在init.py文件import包里面的模块(py文件), 就可以实现"import 包名", 实现对多个模块的调用.
下面我们举例说明一下就很容易清楚了:
- import模块: 我们在debug文件中import module模块, 然后调用模块里面的fun函数. 两个文件在同个目录下
1
2
3
4# module模块 def fun(): print("hello world")
1
2
3
4
5# debug import module module.fun()
运行程序代码:
可以看到, 正常导入module文件并调用函数, 下面我们看看调用包.
- “import 包”: 我们需要导入模块1, 模块2的包(packet)
文件结构如下:
模块代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13# 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’
这是因为python没法识别由多个py文件组成的包, 所以我们需要在包里面添加一个init.py文件. 在文件里面添加
1
2
3import module1 import module2
文件结构如下:
重新运行代码,发现程序正常调用两个模块的内容, 也就是说成功import包
题外话: 如果不想在添加__init__.py是不是就没有办法访问module1和module2呢?
也不是, 利用在debug文件中引用时使用下面的语句也可以引用, 但它就不属于包结构了.包结构是含有__init__.py的文件夹, 而下面这种做法是属于导包中相对路径引用.
1
2
3import packet.module1 import packet.module2
注:
作者:Python工匠
链接:https://www.jianshu.com/p/95afe2c3d526
来源:简书
最后
以上就是重要咖啡最近收集整理的关于python中模块和包的区别的全部内容,更多相关python中模块和包内容请搜索靠谱客的其他文章。
发表评论 取消回复