Python中的模块

Python中的模块

Python提供了强大的模块支持,主要体现为不仅在Python标准库中包含了大量的模块,而且还有很多第三方模块,另外开发者自己也可以开发自定义模块,这些强大的模块极大地提高我们的开发效率。

1、模块概述

在Python中,一个扩展名为.py的文件称为一个模块,通常情况之下,我们能把实现某一特定的功能的代码放置在一个文件中作为一个模块,从而方便其他程序和脚本导入并使用,另外,使用模块也可以避免函数名和变量名冲突。

2、自定义模块

在Python中,自定义模块有两个作用,一个是规范代码,另一个是方便其他程序使用的已经编写好的代码,从而提高开发效率。自定义模块主要分为两部分,一部分是创建模块,另一部分是导入模块。
2.1、创建模块
创建模块可以将模块中相关的代码编写在一个单独的文件中,并且将该文件命名为“模块名+.py”的形式。
例如:创建计算BMI指数的模块。

def fun_bmi(person,height,weight):
    print(person + "的身高:" + str(height) + "米 \t 体重:" + str(weight) + "千克")
    bmi=weight/(height*height)                  # 用于计算BMI指数,公式为“体重/身高的平方”
    print(person + "的BMI指数为:"+str(bmi))   # 输出BMI指数
    # 判断身材是否合理
    if bmi<18.5:
        print("您的体重过轻 [email protected][email protected]~\n")
    if bmi>=18.5 and bmi<24.9:
        print("正常范围,注意保持 (-_-)\n")
    if bmi>=24.9 and bmi<29.9:
        print("您的体重过重 [email protected][email protected]~\n")
    if bmi>=29.9:
        print("肥胖 ^@[email protected]^\n")

def fun_bmi_upgrade(*person):
    for list_person in person:
        for item in list_person:
            person = item[0]  # 姓名
            height = item[1]  # 身高(单位:米)
            weight = item[2]  #体重(单位:千克)
            print("\n" + "="*13,person,"="*13)
            print("身高:" + str(height) + "米 \t 体重:" + str(weight) + "千克")
            bmi=weight/(height*height)           # 用于计算BMI指数,公式为“体重/身高的平方”
            print("BMI指数:"+str(bmi))          # 输出BMI指数
            # 判断身材是否合理
            if bmi<18.5:
                print("您的体重过轻 [email protected][email protected]~")
            if bmi>=18.5 and bmi<24.9:
                print("正常范围,注意保持 (-_-)")
            if bmi>=24.9 and bmi<29.9:
                print("您的体重过重 [email protected][email protected]~")
            if bmi>=29.9:
                print("肥胖 ^@[email protected]^")

2.2、使用import语句导入模块
创建模块后,就可以在其他程序中使用该模块了,当加载模块时,可以使用import语句实现,语法格式为:

import modulename [as alias]

其中,modulename为要导入模块的名称; [as alias]为给模块起的别名,通过该别名也可以使用模块。
使用import语句还可以一次导入多个模块,在导入模块时,模块之间使用逗号“,”进行分割。

import bmi,tips,differenttree

2.3、使用from…import语句导入模块
在使用import语句导入模块时,每执行一条import语句都会创建一个新的命名空间(namespace),并且在该命名空间中执行与.py文件相关的所有语句,如果不想在每次导入模块时都创建一个新的命名空间,而是将具体的定义导入当前的命名空间,这时可以使用form…import语句导入模块后,不需要再添加前缀,直接通过具体的变量、函数和类名等访问即可。

from modelname import member

其中,modelname为模块名称,并且区分大小写,member是用于指定要导入的变量、函数或者类等。
例如:导入两个包括同名函数的模块。
(1)创建矩形模块,在该文件中,定义两个函数,一个用于计算矩形的周长,另一个用于计算矩形的面积。

'''矩形模块'''
def girth(width,height):
    '''功能:计算周长
       参数:width(宽度)、height(高)
'''
    return (width + height)*2

def area(width,height):
    '''功能:计算面积
       参数:width(宽度)、height(高)
'''
    return width * height
if __name__ == '__main__':
    print(area(10,20))

(2)创建圆形模块,定义两个函数,一个用于计算圆形的周长,另一个用于计算圆形的面积。

'''圆形模块'''
import math
PI = math.pi   # 圆周率
def girth(r):
    '''功能:计算周长
       参数:r(半径)
'''
    return round(2 * PI * r ,2 )  # 计算周长并保留两位小数

def area(r):
    '''功能:计算面积
       参数:r(半径)
'''
    return round(PI * r * r ,2)  # 计算面积并保留两位小数
if __name__ == '__main__':
    print(girth(10))

(3)创建文件,在该文件中,首先导入矩形模块的全部定义,然后导入圆形模块的全部定义,最后分别调用计算矩形周长的函数和计算圆形周长的函数。

'''进行各种计算'''
from rectangle import *                       # 导入矩形模块
from circular import *                        # 导入圆形模块

if __name__ == '__main__':
    print("圆形的周长为:",girth(10))         # 调用计算圆形周长的方法
    print("矩形的周长为:",girth(10,20))      # 调用计算矩形周长的方法
# 以下为正常执行的代码,请将上面的代码删除,然后将下面代码的注释删除
'''
import rectangle as r                      # 导入矩形模块
import circular as c                       # 导入圆形模块

if __name__ == '__main__':
    print("圆形的周长为:",c.girth(10))         # 调用计算圆形周长的方法
    print("矩形的周长为:",r.girth(10,20))      # 调用计算矩形周长的方法
'''

2.4、模块搜索目录
当使用import语句导入模块时,在默认情况下,会按照以下顺序进行查找。
①在当前目录(即执行的Python脚本文件所在目录)下查找;
②到环境变量下的每个目录中查找;
③到Python的默认安装目录下查找。
如果要导入的模块文件和导入它的文件不在相同目录中,则可以通过以下的方式导入。
2.4.1、临时添加
临时添加即在导入模块的Python文件中添加,将某目录下的文件保存在sys.path中,

import sys
sys.path.append("D:/python/demo")

2.4.2、增加.py文件
在Python的安装目录下的Lib\site-packages子目录中,创建一个扩展名为.ph的文件,例如,创建一个mrpath.pth文件,在该文件中添加要导入模块所在的目录。
2.4.3、在环境变量中添加
计算机→属性→高级系统设置→系统属性→环境变量。

3、Python中的包

使用模块可以避免函数名和变量名重名引发的冲突,那么,如果模块名重复应该怎么办呢?在Python中,包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下,这样,既可以起到规范代码的作用,又可以避免模块名重名引发的冲突。
3.1、Python程序的包结构
在实际项目开发时,通常情况下,去创建多个包用于存放不同类的文件,
Python中的模块3.2、创建和使用包
3.2.1、创建包
创建包实际上就是创建一个文件夹,并且在该文件夹中创建一个名称为“init.py”的文件,方法步骤为:在D盘中创建一个名称问settings的文件。
3.2.2、使用包
创建包以后,就可以在包中创建相应的模块,然后再使用import语句从包中加载模块,从包中加载模块通常有三种方式。
①通过“import+完整包名+模块名”形式加载指定模块
假如有一个名称为settings的包,在该包下有一个名称为size的模块,代码为:

import settings.size

②通过“from+完整包名+import+模块名”
假如有一个名称为settings的包,在该包下有一个名称为size的模块,代码为:

from settings import size

③通过“from+完整包名+模块名+import+定义名”

from settings.size import width,height

例如:在指定包中创建通用的设置和获取尺寸的模块。
(1)在settings包中创建一个名称为size的模块,在该模块中定义两个保护类型的全局变量,分别代表了宽度和高度,然后定义一个change()函数,用于修改两个全局变量的值,在定义两个函数,分别用于获取宽度和高度。

_width = 800        # 定义保护类型的全局变量(宽度)
_height = 600       # 定义保护类型的全局变量(高度)
def change(w,h):
    global _width       # 全局变量(宽度)
    _width = w        # 重新给宽度赋值
    global _height      # 全局变量(高度)
    _height = h       # 重新给高度赋值
def getWidth():     # 获取宽度的函数  
    global _width
    return _width
def getHeight():     # 获取高度的函数  
    global _height
    return _height

if __name__ == '__main__':  # 测试代码
    change(1024,768)       # 调用change()函数
    print("宽度:",getWidth())      # 输出宽度
    print("高度:",getHeight())     # 输出高度

(2)在settings包的上一层目录中创建一个名称为main.py的文件,在该文件中导入settings包下的size模块的全部定义,并且调用change()函数重新设置宽度和高度,然后再分别调用。

from settings.size import *   # 导入size模块下的全部定义
if __name__=='__main__':
    change(1024,768)  # 调用change()函数改变尺寸
    print('宽度:',getWidth())      # 输出宽度
    print('高度:',getHeight())     # 输出高度

运行结果为:
Python中的模块
3.3、以主程序的形式执行
创建一个模块,名称为christmastree,在该段代码中,首先定义一个全局变量,然后创建一个名称为fun_christmastree()的函数,最后通过print()函数输出一些内容。

pinetree = '我是一棵松树'   # 定义一个全局变量(松树)

def fun_christmastree():  # 定义函数
    '''功能:一个梦
       无返回值
    '''
    pinetree = '挂上彩灯、礼物……我变成一棵圣诞树 @^.^@ \n' # 定义局部变量赋值
    print(pinetree)  # 输出局部变量的值
       
#*****************************函数体外***********************************#
print('\n下雪了……\n')
print('=============== 开始做梦…… =============\n')
fun_christmastree()  # 调用函数
print('=============== 梦醒了…… ===============\n')
pinetree = '我身上落满雪花,'+pinetree + ' -_- ' # 为全局变量赋值
print(pinetree)  # 输出全局变量的值

运行结果为:
Python中的模块

4、引用其他模块

在Python中,除了可以自定义模块外,还可以引用其他模块,主要包括使用标准模块和第三方模块,
4.1、导入和使用标准模块
在Python中,自带了很多使用的模块,称为标准模块,对于标准模块,我们可以直接使用import语句导入Python文件中使用,例如,导入标准模块random,代码为:

import random

例如:导入random模块后,调用randint()函数生成一个指定范围的随机整数,生成0~10(包括10)的随机整数的代码如下;

import random
print(random.randint(0,10))

例如:生成由数字、字母组成的4位验证码

import random     # 导入标准模块中的random

if __name__=='__main__':
    checkcode = ""                      # 保存验证码的变量
    for i in range(4):                  # 循环4次
        index =random.randrange(0,4)    # 生成0~3中的一个数
        if index != i and index+1 != i:
            checkcode += chr(random.randint(97,122))  # 生成a~z中的一个小写字母
        elif index+1 == i:
            checkcode += chr(random.randint(65,90))   # 生成A~Z中的一个大写字母
        else:
            checkcode += str(random.randint(1,9))     # 生成1~9中的一个数字
    print("验证码:",checkcode)        # 输出生成的验证码

运行结果为:
Python中的模块
除了random模块外,Python还提供了200多个内置的标准模块,涵盖了Python运行时服务、文字模式匹配、操作系统接口、数字运算、对象永久保存、网络Internet脚本和GUI建构等方面。在Python的安装路径下的Doc目录,在该目录中的扩展名为.chm的文件,即为Python的帮助文档,
Python中的模块4.2、第三方模块的下载与安装
在进行Python程序开发时,除了可以使用Python内置的标准模块外,还有很多第三方模块可以让我们使用,具体可以查看Python官方推出的http://pypi.python.org/pypi中找到。
下载和安装第三方模块可以使用Python提供的pip命令实现。

pip <command> [modulename]

其中,command是用于指定要执行的命令,常用的参数有install(下载第三方模块)、uninstall(用于卸载已经安装的第三方模块)、list(用于显示已经安装的第三方模块)等。modulename表示可选参数,用于指定要安装或者卸载的模块名,
①例如安装numpy模块(用于科学计算)

pip install numpy

②查找Python中都有哪些模块(包括标准模块和第三方模块)

help("modules")

③查看已经安装的第三方模块,可以输入命令为:

pip list

Python中的模块