此篇来自python运维技术公众号分享,喜欢的可以搜索关注,每天一篇精选技术文章。
模块化编程是一种将较大的程序划分为较小的原子子任务以便更好地管理和降低复杂性的方法。
在 Python 中,你一定听说过模块、包和库等术语。但是它们之间的区别可能会让我们感到非常困惑,所以这篇文章我们就说下它们之间的不同。
Python 模块
Python 模块是一堆相关的代码组合在一起。我们可以在 Python 模块中包含函数、类或变量。
假设我们有两个文件。
main.py
arithmetic.py
arithmetic.py 文件包含可能在 main.py 程序中使用的所有必要的数学运算。
下面是arithmetic.py 程序的实现:
arithmetic.py
# variable
author = "Pylenin"
# functions
def add(a, b):
"""Returns sum of 2 integers"""
return a+b
def subtract(a, b):
"""Returns difference of 2 integers"""
return a-b
def multiply(a, b):
"""Returns product of 2 integers"""
return a*b
def divide(a, b):
"""Returns division of 2 integers"""
if b == 0:
return "Invalid"
return a/b
# class
class ArithmeticOperations:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
在同一个模块中添加类似的代码并重用它是很常见的。因此,可以只导入需要的特定功能。
我们可以将变量、函数和类导入 main.py 并执行必要的操作。这样的会使我们的代码保持干净且易于调试。
main.py
from arithmetic import ArithmeticOperations
from arithmetic import add
from arithmetic import author
print(author)
print(add.__doc__)
obj = ArithmeticOperations(2, 10)
print(obj.add())
上面的代码返回以下输出。
输出
Pylenin
Returns sum of 2 integers
12
Python中的模块示例
datetime
csv
re (Regular Expression)
包(Packages)
包是各种模块的集合。
在构建大型应用程序时,可能很难维护大量模块。这就是包发挥作用的地方。
我们根据标准将文件存储在不同的文件夹和子文件夹中的方式,我们可以将各种 python 模块打包到一个包中。
要被视为一个包,它必须包含一个名为 init.py 的文件。该文件包含相应包的初始化代码。
为什么需要 init.py 在包中?
init.py 包含包的初始化代码。例如,我们可以通过将这些特定函数导入 init.py 文件来控制从包中公开的函数。
这是一个名为 my_awesome_package 的包的示例。我们将它导入到 main.py。
main.py
my_awesome_package
|
|
---__init__.py
|
|
---arithmetic.py
|
|
---welcome.py
arithmetic.py 与上面提到的代码相同。Welcome.py 如下所示。
def greet():
"""Used for greetings"""
return "Hello there"
现在,假设你只想从你的 Awesome 包中公开 add(a, b) 和 greet 函数。为此,只需在 init.py 文件中导入那些特定函数。
init.py
from .arithmetic import add
from .welcome import greet
有了这个 init.py 文件,就可以控制要从包中公开的内容。
现在,当在 main.py 中导入 my_awesome_package 时,将无法访问除 add(a, b) 之外的其他算术函数。如果你尝试导入任何其他函数,将收到 ImportError。
main.py
from my_awesome_package import add, greet, multiply
print(add.__doc__)
print(greet())
输出:
Traceback (most recent call last):
File "main.py", line 1, in
from my_awesome_package import add, greet, multiply
ImportError: cannot import name 'multiply' from 'my_awesome_package' (/home/runner/weffds/my_awesome_package/__init__.py)
Python 包的示例
Numpy
Pandas
Pytest
Python 库
Python 库是模块和包的集合。
术语库和包有时可以互换使用。Pandas 和 Numpy 等包也称为库。
开发人员构建 Python 库以与社区共享可重用代码以执行类似的操作集。
Python 库示例
Matplotlib - 用于数据可视化
Requests - 用于在 Python 中发出 HTTP 请求
TensorFlow - 用于高级计算的开源库
本篇完,感谢大家支持。