python模块基础

模块

1 什么是模块

    模块一系列功能的集合体

    模块分为四种通用的类别
      1 使用python编写的.py文件
    
      2 已被编译为共享库或DLL的C或C++扩展
    
      3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
    
      4 使用C编写并链接到python解释器的内置模块

            模块有三种来源:
                1 python自带的模块/库
                    内置模块
                    标准库
            
                2 第三方的库
            
                3 自定义库

2 为何要用模块

    1 拿来主义,提升开发效率
    2 减少代码冗余

3 如何用模块

    import+模块名   #将函数放在一个文件内, 不会与当前文件夹函数名冲突
    from ... import   # 使用方便,但容易与当前文件夹函数名冲突

4 import+模块名

1、首次导入模块发生了2件事:
    1、会触发spam.py的运行,会产生一个模块的名称空间,用来存放模块运行过程中产生的名字
    2、会在当前文件的名称空间中产生一个名字spam,该名字指向模块的名称空间
    后续的导入直接引用之前已经产生的名称空间

2、为模块名起别名
    为已经导入的模块起别名的方式对编写可扩展的代码很有用

3、在一行导入多个模块
    import sys,os,re

5 from+模块名+import+功能函数名

1、首次导入模块发生了2件事:
    1、会触发spam.py的运行,会产生一个模块的名称空间,用来存放模块运行过程中产生的名字
    2、会在当前文件的名称空间中产生一个名字spam,该名字指向模块的名称空间
    后续的导入直接引用之前已经产生的名称空间

2、为模块名器别名
    from spam import read1 as read

3、一行导入多个名字
    from spam import read1,read2,money

4、from...import *
    from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置
    大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。
      而且可读性极其的差,在交互式环境中导入时没有问题。

6 模块循环导入问题

模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码
在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,可以将共享的数据集中存放到某一个地方
在程序出现了循环/嵌套导入后的异常分析、解决方法如下:
    1、导入语句放到最后
    2、导入语句放到函数中
    3、可以借用其他模块,如在调用模块下再调用import os,将需要用到的变量os.environ['x']=str(x),然后在运行文件里调用os模块和被调用模块,os.environ['x']

7 py文件区分两种用途:模块与脚本

编写好的一个python文件可以有两种用途:
    一:脚本,一个文件就是整个程序,用来被执行
    二:模块,文件中存放着一堆功能,用来被导入使用


python为我们内置了全局变量__name__,
    当文件被当做脚本执行时:__name__ 等于'__main__'
    当文件被当做模块导入时:__name__等于模块名

作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    if __name__ == '__main__':

8 模块搜索路径

模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
搜索路径:
    当一个命名为spam的模块被导入时
      解释器首先会从内建模块中寻找该名字
      找不到,则去sys.path中找该名字

sys.path从以下位置初始化
    1 执行文件所在的当前目录
    2 PTYHONPATH(包含一系列目录名,与shell变量PATH语法一样)
    3 依赖安装时默认指定的
posted @ 2021-07-05 16:05  zhutianyu  阅读(71)  评论(0)    收藏  举报