九、模块和包

在Python的标准安装中,包含了一组自带的模块,这些模块被称为“标准库”。比如常用的math,random,datetime,os,json等等。

此外,还有很多的第三方模块,比如pymysql,numpy,requests,pandas等等。通过这些强大的扩展库, 形成了Python的强大“生态圈”。

1. 模块的概念和基本使用

Python的模块(Module),其实就是.py结尾的Python文件,模块里可以定义类,变量,函数,以及可执行的代码。我们导入模块,就可以用这些模块的功能。

模块导入有两种语法:

(1)import 模块名1 [ as 别名1 ],模块名2 [ as 别名2 ],...,模块名n [ as 别名n ] ;——导入整个模块

(2)from 模块名 import 成员名1 [ as 别名1 ],成员名2 [ as 别名2 ],...,成员名2 [ as 别名2 ] ;——导入模块中指定成员

以下为第一种用法案例:

示例一,import 模块名

import random # 导入Python内置的random模块
print(random.randint(1, 10))

示例二,import 模块名 as 别名

import random as r   #导入python内置的random模块
print(r.randint(1, 10))

示例三,import 模块1,模块2

import random, time
print("开始,过5秒执行")
time.sleep(5)
print(random.randint(1, 10))
print("开始结束")

示例四,import 模块1 as 别名1,模块2 as 别名2

import random as r, time as t
print("开始,过5秒执行")
t.sleep(5)
print(r.randint(1, 10))
print("开始结束")

以下为第二种用法案例:

示例一,from 模块 import 成员

from random import randint
print(randint(1, 10))

示例二,from 模块 import 成员 as 成员别名

from random import randint as r
print(r(1, 10))

示例三,from 模块 import 成员1,成员2

from random import randint, random
print(random())
print(randint(1, 10))

示例四,from 模块 import 成员1 as 成员别名1,成员2 as 成员别名2

from random import randint as ri, random as rd
print(ri(1, 10))
print(rd())

示例五,from 模块 import *

from random import *
print(random())
print(randint(1, 10))

2. 自定义模块

Python中已经有很多的内置模块,以及也有很多的第三方优秀模块,我们直接导入使用即可。 当然我们有时候也需要自己定义一些模块,来实现我们项目的功能。

看下案例:

先定义string_util.py,判断字符串是否空的工具方法

# 判断字符串是否空的工具方法
def isEmpty(s: str):
    """
    判断字符串是否是空
    :param s: 传入字符串参数
    :return: 空则返回True,否则返回False
    """
    if not s:
        return True
    elif len(s.strip()) == 0:
        return True
    else:
        return False

再新建一个test.py

# import string_util
#
# print(string_util.isEmpty(""))
# print(string_util.isEmpty(None))
# print(string_util.isEmpty(" "))
# print(string_util.isEmpty(" 12 "))
from string_util import isEmpty
print(isEmpty(""))
print(isEmpty(None))
print(isEmpty(" "))
print(isEmpty(" 12 "))

如果我们在string_util.py里加一个测试代码:

image-20240724115053513

我们再运行test.py,执行结果如下:

测试结果: True
True
True
True
False

经过测试,当我们导入模块的时候,可执行代码也是会一起导入进来的, 但是我们不希望测试代码被执行。

此时可借助于所有模块内置的name变量进行区分,如果直接使用python命令来运行一个模块,name变量的值为main;如果该模块被导入其他程序中,name变量的值就是模块名。因此,如果希望测试函数只有在使用 python命令直接运行时才执行,则可在调用测试函数时增加判断:只有当name属性为main时才调用测试函数。

代码如下:

if __name__ == '__main__':
    print("测试结果:", isEmpty(None))

当我们一个模块里有很多方法的时候,有时候我们只想暴露部分方法,有些方法我们仅限模块内部使用,或者暂时不想对外暴露,这时候,我们可以使用 __all__来实现。

string_util.py内部再写一个方法:

def isNotEmpty(s: str):
    """
    判断字符串是否不是空
    :param s: 传入字符串参数
    :return: 不空则返回True,否则返回False
    """
    if s:
        if len(s.strip()) > 0:
            return True
        else:
            return False
    else:
        return False

我们现在想让 isNotEmpty暂时不被外部导入使用。

我们可以用__all__来指定所有可以被导入使用的成员。

__all__ = ["isEmpty"]

仅对from string_util import *有效。

3. Python包

对于一个需要实际应用的模块而言,往往会具有很多程序单元,包括变量、函数和类等,如果将整个模块的所有内容都定义在同一个Python源文件中,这个文件将会变得非常庞大,显然并不利于模块化开发。

为了更好地管理多个模块源文件,Python提供了包的概念。那么问题来了,什么是包呢?

  • 从物理上看,包就是一个文件夹,在该文件夹下包含了一个_ init.py文件,该文件夹可用于包含多个模块源文件。
  • 从逻辑上看,包的本质依然是模块。

image-20240724145238996

我们右击项目 Python Package,就是新建包

image-20240724145345353

pycharm自动给我们创建__init__.py文件

再新建两个模块,分别是module1.pymodule2.py

image-20240724145643974

使用方法: 相对之前的导入方式,前面要加上包名——导入整个模块 import 包名.模块名

import my_package.module1
import my_package.module2

my_package.module1.test1()
my_package.module2.test2()

导入模块中指定成员 from 包名 import 模块名.成员名

from my_package import module1, module2
module1.test1()
module2.test2()
from my_package.module1 import test1
from my_package.module2 import test2
test1()
test2()

我们可以在 init.py文件里控制暴露的模块,通过__all__=[]指定

__all__ = ['module1']

测试:

from my_package import *
module2.test2()

结果:

image-20240724150841741

4. 安装Python第三方库

在Python的标准安装中,包含了一组自带的模块,这些模块被成为“标准库”。比如常用的 math,random,datetime,os,json等等。

此外,还有很多的第三方模块,或者叫做库也行,叫包也行。 列举部分如下:

numpy库——科学计算领域

Django库——web开发领域

pandas库——数据分析领域

pyspark库——大数据领域

诸如此类的库形成了Python的强大“生态圈”。

安装第三方库,我们用pip命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名

如果没有安装pip命令,请使用以下命令安装:python get-pip.py

image-20240724154238009

用pycharm安装第三方库,更方便。Setting -> Python Interpreter

image-20240724154603086

点"+"加号. 输入你想要安装的第三方库名,可以指定版本,再加上清华的库镜像,然后点击安装。

最近一次更新 3/20/2025, 7:54:12 AM