python3-模块及模块编写规范

系列文章目录

一、模块的概念

  • 模块的概念:

    在Python中,一个.py文件就是一个模块,模块是比类更高一级的封装。文件名就是模块的名字,模块里面包含了一些有特定功能的代码,一般是给其他程序使用的。

    就像是工具箱或一堆零件,要什么工具或零件从里面拿就是了。

  • 模块的分类:

    • 内置模块:python自带的模块,如time模块;
    • 第三方模块:由其他大佬程序员写的,我们安装后就可以使用;
    • 自定义模块:由我们自己写的模块,命名风格与变量的一致;
  • 模块的三种形式:

    • 使用python编写的.py文件。
    • 被编译为共享库或DLL的C或C++扩展。(了解)
    • 使用C语言编写并连接到python解释器的内置模块。(了解)
  • 模块的作用:

    • 内置模块与第三方模块需要哪个就用哪个,拿过来就能用,不需要自己写,省时省力;

    • 自定义模块需要自己写,通常将一些经常要用的代码写在模块中,在有需要的地方使用,提高了代码的重用率。

二、模块导入

在使用模块里面的东西前,需要先导入模块!

1. import导入

  • 用法:

    • 使用import关键字,导入模块;

    • 导入时因遵守内置、第三方、自定义的导入顺序,且应该用空行隔开;

    • 一行可以导入多个,但尽量一行一个的导入;

    • 使用时以模块名.xxx的形式调用;

    import time, random, ……  # 一行多个
    
    import 第三方1
    import 第三方2
    
    import 自定义1
    import 自定义2
    
    time.time()  # 返回时间戳
    
  • 使用as关键字可以给模块起别名:

    import numpy as np
    
    np.array()
    
  • import导入模块时,python解释器执行的操作:

    1. 创建一个该模块的命名空间;

    2. 执行该模块内的代码;

    3. 将执行过程中产生的名称放进,模块的命名空间;

    4. 在当前程序的命名空间中放入模块的名称,该名称指向模块的命名空间。

  • __name__属性:

    这是每个python文件都有的属性,

    • foo.py被执行时,__name__的值为__main__
    • foo.py被当作模块导入时,__name__的值为模块名foo

    使用if判断,可以避免模块内不应该在导入时执行的代码被执行:

    def foo():
        pass
    
    def bar():
        pass
    
    foo()  # 被导入时,foo()会执行
    
    if __name__ == '__main__':
    bar()  # 被导入时,bar()不会执行
    

2. from...import...导入

  • 用法:
    from...import...的用法与import基本相同,不同之处在于可以按照需要取出模块中的一部分。
    假设我们只需要foo模块下的bar函数,不需要其他的,可以这样写:

    from foo import bar
    from time import *  # 导入全部
    
    bar()  # 不需要加模块名前缀
    

    from...import...导入后,调用时不需要加模块名前缀;

    可以和as关键字连用。

    可以使用*导入模块内的全部名称。

三、模块相关的补充

  • __all__变量的作用:

    __all__是一个列表,里面写入该模块内的名称,使用*来导入的时候,其实就是导入列表中指出的所有名称。

    __all__ = ['foo', 'bar', 'baz']
    

    一旦定义,则只能导入__all__中的名称!

  • sys.path的作用:

    sys.path是一个列表,保存着一些文件夹路径,python搜索模块的时候,会按照顺序在这些文件夹里面找。

    手动添加路径,以便python查找:

    sys.path.append(r'/user/python/foo.py')
    
  • 模块搜索优先级:

    • 先内存
    • 后外存(按照sys.path中,存放的文件夹的顺序查找)
  • 查看已导入的模块:

    sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。

    sys.module对加载模块起到了缓存作用。当某个模块第一次被导入时,sys.modules将自动记录该模块。当第二次再导入时,python会直接到sys.modules中查找,从而加快了程序运行的速度。

四、模块编写规范

我们编写的代码,不仅是给自己用,还有可能会被别人拿去用。因此,代码的可读性与可维护性十分重要,这就需要我们按照一定的规范去书写程序。

注意以下程序的写法和定义顺序:

#!/usr/bin/python  # 指定解释器路径,通常只在unix环境有效

"""
模块的文档描述
"""

import sys  导入模块

x = 1  # 定义全局变量


class Foo:
    """类的文档说明"""
    pass


def bar():
    """函数的文档说明"""
    pass


if __name__ == '__main__':
    bar()

下一篇

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值