30天拿下Python之模块和包

希望睿智 2024-06-21 20:40:07
概述

在上一节,我们介绍了Python的异常处理,包括:异常、异常处理、抛出异常、用户自定义异常等内容。在这一节中,我们将介绍Python的模块和包。Python的模块(Module)和包(Package)是Python的两个主要概念,它们都是用来组织和封装代码的机制。

python

什么是模块

模块实际上就是一个Python文件,它包含了Python对象定义和Python语句。文件名是模块名加上“.py”后缀,比如:如果一个文件名为my_module.py,那么它就被称为my_module模块。模块让你能够有逻辑地组织你的Python代码段,把相关的代码分配到一个模块里能让你的代码更好用、更易懂。模块能定义函数、类和变量,模块里也能包含可执行的代码。模块可以被别的程序引入,以使用该模块中的函数、类等功能。

Python中的模块可以分为两种:内置模块和第三方模块。内置模块是Python自带的模块,比如:datetime(日期和时间处理)、math(数学运算)、random(随机数生成)等。第三方模块则是由Python社区或开发者开发的模块,在Python的官方网站上可以找到。

使用模块的好处有很多,主要包括:提高代码复用性、代码组织结构更加清晰、降低程序耦合性、提高程序的安全性等。

导入模块

在Python中,可以使用import语句来导入模块,这使得你可以使用其他模块中定义的函数、类和变量。导入模块时,Python会执行该模块中的所有顶层代码。如果模块本身又导入其他模块,那么这些导入的模块也会一并被执行。

# 导入os模块

import os

# 导入math模块

import math

# 使用os模块中的变量

print(os.curdir)

# 使用math模块中的函数

print(math.pow(2, 4))

在上面的示例代码中,os和math都是Python提供的标准库模块。os模块提供了与操作系统交互的函数,math模块则提供了许多与数学计算相关的函数。

如果你只想导入模块中的特定函数和变量,可以使用from import的语法。如果你想导入模块中的所有内容,可以使用from import *的语法。

# 从math模块导入log10函数

from math import log10

# 从os模块导入所有内容

from os import *

# 使用math模块的log10函数

print(log10(100))

# 使用os模块的cpu_count函数

print(cpu_count())

自定义模块

除了导入系统的内置模块,还可以创建自定义模块,并导入这个自定义模块。比如:你有一个名为my_module.py的Python文件,其中定义了一个名为为my_func的函数。

# my_module.py文件

def my_func(a):

print(a)

你可以在另一个Python文件main.py中导入my_module模块,并使用该模块中的函数。

# main.py文件

import my_module

my_module.my_func('hello world')

__name__

在Python中,__name__是一个特殊变量,用于表示一个模块的名称。当一个模块被直接运行时,__name__的值为__main__。当该模块被导入为库或者子模块时,__name__的值将是该模块的名称。

这个变量常用于在模块中执行特定的代码,只有当该模块被直接运行时才执行。在一个模块中,可以使用if __name__ == "__main__"来确保后面的代码只在该模块被直接运行时执行,而在其他模块中被导入时则不执行。比如:有一个模块my_sky,对应的my_sky.py文件如下。

# my_sky.py

def sky_blue():

print('sky blue')

if __name__ == '__main__':

sky_blue()

直接运行my_sky.py时,会执行sky_blue函数并输出“sky blue”。但在另一个脚本中导入my_sky.py时,并不会执行sky_blue函数。这个特性常用于编写可执行脚本或测试脚本,只有在直接运行该脚本时,才会执行某些操作。

什么是包

包是一个包含多个模块的目录,该目录下必须包含一个名为__init__.py的文件,该文件可以为空。包可以嵌套,即一个包可以包含多个子包。包提供了组织模块的机制,使得模块能够按照目录结构进行分类,便于管理和查找。包将相关的代码文件和资源文件打包在一起,从而形成一个独立的单元。

Python的包可以包含:Python模块、其他包、包特定的数据文件和配置文件。

创建包

要创建一个Python包,需要创建一个文件夹,通常以该包的名称命名,并在该文件夹中包含一个__init__.py文件。这个__init__.py文件是一个特殊的文件,当一个包被导入时,该文件会自动执行,这可以用于初始化该包或定义在该包中导出的函数和变量。包中还可以包含其他的.py文件,这些文件中包含函数、类、变量等包的特定代码。

创建一个Python包的具体步骤如下:

1、创建一个文件夹,作为包的根目录,并命名为包的名字,包名通常使用小写字母和下划线。

2、在该文件夹中创建一个名为__init__.py的文件。这个文件是一个特殊的文件,当一个包被导入时,该文件会自动执行。这个文件可以是空的,也可以包含一些初始化代码,或者定义在该包中导出的函数和变量。

3、在该文件夹中创建其他的Python文件和文件夹,用于包含包的具体代码和资源。

4、如果需要在包的元数据中使用一些特殊的标记或者依赖项,可以在该文件夹中创建一个名为setup.py的文件,用于描述该包的元数据和依赖项。

下面是一个简单的示例,展示了如何创建一个包含两个模块的Python包。

1、创建一个名为my_package的文件夹,作为包的根目录。

2、在该文件夹中创建两个Python文件,分别为module1.py和module2.py。

3、在module1.py中定义一个名为func1的函数。

# module1.py文件

def func1():

return "Hello from module 1"

4、在module2.py中定义一个名为func2的函数。

# module2.py文件

def func2():

return "Hello from module 2"

5、在my_package文件夹中创建一个名为__init__.py的文件,用于导出在模块中定义的函数。

# __init__.py文件

from .module1 import func1

from .module2 import func2

6、现在,你可以在其他Python代码中使用这个包了。

import my_package

# 输出:Hello from module 1

print(my_package.func1())

# 输出:Hello from module 2

print(my_package.func2())

导入包

要使用一个Python包,需要使用import语句来导入该包,并使用.操作符来访问该包中的函数、类和变量等。比如:有一个名为my_package的包,其中包含一个名为my_module的模块,my_module模块中包含一个名为my_func的函数,可以使用下面的示例代码来使用该包。

import my_package.my_module

my_package.my_module.my_func()

在Python中,导入包的具体步骤如下:

1、确保已经将包安装到你的Python环境中,可以使用pip命令来安装包,比如:pip install package_name。

2、使用import语句导入包,可以使用点号来指定包的路径。在下面的示例代码中,将导入package包中的module模块。

import package.module

3、如果只想导入包中的某个模块或函数,可以使用from import语句。在下面的示例代码中,将导入package包中的module模块,并可以直接使用该模块中的函数和变量。

from package import module

4、如果需要导入包中的多个模块或函数,可以使用逗号分隔它们。在下面的示例代码中,将导入package包中的module1、module2、func1和func2。

from package import module1, module2, func1, func2

注意:包和模块的名称,必须与文件系统中的目录结构相对应。如果包中没有包含__init__.py文件,则不能将其视为一个包。此时,需要手动将该目录添加到Python的模块搜索路径中才能正常使用。

💡 如果想阅读最新的文章,或者有技术问题需要交流和关注公众号号号号“希望睿智”。

1 阅读:70

希望睿智

简介:软件技术分享,一起学习,一起成长,一起进步