• 模块和包--python基础


    1. 什么是模块

    1)模块的英文为:Modules
    2) 模块是一个扩展名为“.py”的文件
    3) 模块的作用:
    (1) 规范代码,易于阅读
    (2) 提高开发效率:方便其他程序使用已经编写好的代码
    (3) 避免函数名和变量名冲突

    2. 自定义模块

    2.1 创建模块

    1)创建模块实际上就是创建一个.py文件
    2)创建的模块名不要与python自带的标准模块名相同
    3) 模块中可以包含变量、函数、类

    在这里插入图片描述

    2.2 导入模块

    1)导入模块有两种方式:
    (1)import语句导入模块
    (2) from…import… 语句导入模块
    2)在导入模块时,会将所有没有缩进的代码都执行一遍

    2.2.1 import 语句导入

    (1)使用import语句方式导入,导入模块中所有工具
    (2)当模块名较为复杂,可以使用 as 关键字给模块起别名
    (3)调用模块中的变量、函数、类时需要在前面加上模块名:模块名.工具
    (4) 导入多个模块时,推荐每个导入模块占据一行
    语法格式:

    import 模块名 [as 别名]
    
    
    • 1
    • 2
    
    
    actor = '我最喜爱的演员名是cdm'
    print(actor)
    
    
    def income(income1, income2):
        return income1*0.6+income2*0.8
    
    
    class Action(object):
        def __init__(self, ac_name, tv_name):
            self.ac_name = ac_name
            self.tv_name = tv_name
    
        def eval(self, score):
            print('%s  主演的电视剧  [%s],观众评分:  %.1f' % (self.ac_name, self.tv_name, score))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    这里也可以看出,虽然掉导入模块时,没有调用actor函数,但是因为导入一个模块时自动执行所有没有缩进的代码,所以,actor函数依然执行了。

    2.2.2 使用from … import 语句导入模块

    (1) 这种方法导入模块中的部分工具
    (2)不需要通过模块名.作为前缀,可以直接使用模块提供的函数、变量和类

    在这里插入图片描述

    这里也可以看出,虽然掉导入模块时,没有调用actor函数,但是因为导入一个模块时自动执行所有没有缩进的代码,所以,actor函数依然执行了。

    2.2.3 以主程序形式执行

    要想解决上面没有调用actor函数,确执行的情况,可以使用python的内置函数__name__.
    在实际开发中,开发人员通常会创建模块后增加一些测试代码,比如actor函数的print(actor),再比如在模块中创建对象测试,但是这些代码在导入模块时是不需要被执行的。

    actor = '我最喜爱的演员名是cdm'
    print(actor)
    
    
    def income(income1, income2):
        return income1*0.6+income2*0.8
    
    
    class Action(object):
        def __init__(self, ac_name, tv_name):
            self.ac_name = ac_name
            self.tv_name = tv_name
    
        def eval(self, score):
            print('%s  主演的电视剧  [%s],观众评分:  %.1f' % (self.ac_name, self.tv_name, score))
    
    
    # 作为模块导入时,不需要执行的测试代码
    dww = Action('大胃王', 18)
    dww.eval(9.2)
    print('输出的', __name__)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述
    在调用模块中执行结果:

    在这里插入图片描述
    可以看到,在输入__name__的主程序中执行,输出结果为:main;当作为模块导入其他模块时,输出结果为被导入模块的模块名。
    因此,可以通过添加__name__ == 'main’来判断是否在主程序执行,在主程序执行,就输出测试代码,查看代码能够正常运行;而作为模块导入时,不执行测试代码。

    
    
    actor = '我最喜爱的演员名是cdm'
    if __name__ =="__main__":
        print(actor)
    
    
    def income(income1, income2):
        return income1*0.6+income2*0.8
    
    
    class Action(object):
        def __init__(self, ac_name, tv_name):
            self.ac_name = ac_name
            self.tv_name = tv_name
    
        def eval(self, score):
            print('%s  主演的电视剧  [%s],观众评分:  %.1f' % (self.ac_name, self.tv_name, score))
    
    if __name__ =="__main__":
        # 作为模块导入时,不需要执行的测试代码
        dww = Action('大胃王', 18)
        dww.eval(9.2)
        print('输出的', __name__)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述
    导入其他模块时,执行效果:
    在这里插入图片描述
    在这里插入图片描述
    可以看到并没有输出ac_income中的测试代码。

    3. 包

    1)包是一个分层次的目录结构,他将一组功能相近的模块组织在一个目录下
    2)包具有以下作用:
    (1)避免模块名重名引发的冲突
    (2) 规范代码
    3)包与文件夹的区别
    (1) 包简单理解是文件夹,不过,在该文件夹中必须存在一个名为:init.py的文件
    4)包的命名方式与变量名一样,命名不符合规范会导致导入包时出现问题

    3.1 创建包

    在这里插入图片描述
    在创建python包时,会自动创建__init__.py文件文件
    (1)init.py 文件在导入包时会默认加载,自动执行;
    (2) 可以将一些初始化的函数、变量、类放在__init__.py文件中

    3.2 导入包

    导入包与导入模块一样,有两种方法:
    1)使用import语句导入包
    2)使用from…import…语句导入包

    3.2.1 使用import语句导入包

    在这里插入图片描述
    可以看到,当导入包时,还不能使用包中的模块,解决办法:
    1)在__init__.py文件中使用

    from . import 模块名
    
    • 1

    导入模块
    在这里插入图片描述
    之后,可以看到,已经可以使用包里面的income模块
    在这里插入图片描述
    在这里插入图片描述
    2) 使包名.模块名的方式导入
    在这里插入图片描述

    3.2.2 使用from… import 语句导入包

    1) 方式一:使用这种方式,调用模块中工具时,需要使用模块名.

    from 包名 import 模块名
    
    • 1

    在这里插入图片描述
    2) 方式二: 可以直接使用工具名(变量、函数、类名)

    from 包名.模块名  import 工具名
    
    • 1

    在这里插入图片描述
    3) 方式三: 若要导入包中所有内容,可以使用 *星

    from 包名 import *
    
    • 1

    在这里插入图片描述
    可以看到,直接使用*导入包中所有内容时,包下的模块无法正常使用,此时需要在
    init.py文件中通过__all__函数定义可以通过 * 星 访问的模块名
    在这里插入图片描述
    在这里插入图片描述
    可以看到,在__init__.py文件中,通过__all__ 定义了可以通过 * 星 访问的模块income,在使用时income模块可以正常使用,但未通过__all__暴漏的actor模块不能正常使用。
    4)方式四:加载模块下的全部定义(工具)

    from 包名.模块名 import *
    
    • 1

    在这里插入图片描述

    4. 第三方模块的下载与安装

    pip install md  安装md模块
    pip uninstall md 卸载md模块
    pip list 查看已安装的第三方模块
    help('modules') 查看已有的标准模块和第三方模块
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    alertmanager 简介
    基于nodejs的预约上门维修服务系统
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    响应的结构与Http常见状态码
    什么是网络爬虫?
    Android中二维码的扫描与生成(zxing库)
    SIT1044 5V 供电,IO 口兼容 3.3V,5Mbps,(CAN FD)待机模式总线收发器
    0号进程,1号进程,2号进程
    [随笔]Integer.parseInt转换二进制数为int整数异常
    028 - STM32学习笔记 - ADC结构体学习(二)
  • 原文地址:https://blog.csdn.net/chongbaikaishi/article/details/125391171