模块和包

模块:别人写好的函数、变量、方法,放在一个文件里(这个文件可以被我们直接使用)这个文件就是个模块

    .py dll文件  zip文件

  自己创建一个py文件,给他起一个符合变量名命名规则的名字,这个名字就是模块名

模块的导入:

模块导入的过程中发生了什么

  找到这个模块

  判断这个模块是否被导入过了

  如果没有被导入过

    创建一个属于这个模块的命名空间

    让模块的名字指向这个空间

    执行这个模块中的代码

import 模块名

  模块的导入想当于这个模块所在的文件被导入,模块的多次导入不会重复执行。

  命名空间

  为模块起别名  as  语句  (起了别名之后,使用这个模块就只能用这个别名了)

  一行导入多个模块:(顺序)内置、第三方、自定义

from import    也会执行文件,但是import了什么,就只能用什么

  命名空间  名字引用模块中的名字

  为导入的名字起别名

  一行导入多个名字

  *和__all__的关系:__all__只能约束*导入变量的内容

    from my_module import * (默认是导入所有,但是__all__=[“a”]列表没有的就不会被导入)

模块引用中的情况:

  1.模块的循环引用***

    模块之间不允许循环引用

  2.模块的加载与修改*

    已经被导入的模块发生了修改,是不会被感知的

    要想修改的模块被正在运行中的程序感知到,重启这个程序

  3.把模块当成脚本执行*****

    执行一个py文件的方式:

      1.在cmd执行,在pytho执行:直接执行-以脚本的形式

      2.导入这个文件

    脚本:直接运行的文件,都是py文件,能独立的提供一个功能,能自主完成交互

    模块:导入这个文件 ,都是py文件,能够被导入调用这个功能,不能自主交互

    if __name__ == "__main__"    当文件被当做脚本的时候

      代码            当文件被当成模块导入的时候  __name__ =="模块的名字"

    下载这里面的代码只有这个文件被当做脚本执行的时候才会执行

  4.模块的搜索路径*****

    和被当做脚本执行的文件,同目录下的模块,可以被直接导入

    除此之外其他路径下的模块,在被导入的时候需要自己修改sys.path列表

  包:文件夹中有一个__init__.py文件

  包:是几个模块的集合

直接导入包,需要通过设计init文件,来完成导入包之后的操作

导入一个包

  不意味着这个包下面的所有内容都是可以被使用的

  导入一个包到底发生了什么

    相当于执行了这个包下面的__init__.py文件

绝对导入:

  在执行一个py脚本的时候,这个脚本以及和这个脚本同级的模块中只能用绝对导入

缺点:

  所有的导入都要从一个根目录下往后解释这个文件夹之间的关系

  如果当前导入包的文件个被导入的包的位置关系发生了变化,那么所有的init文件都要做相应的调整

相对导入:

  不需要去反复的修改路径

    只要一个包中的所有文件夹和文件的相对位置不发生改变

  也不需要去关心当前这个包和被执行的文件之间的层级关系

缺点:

  含有相对导入的py文件不能直接被执行

  必须放在包里被导入的调用才能正常使用

原文地址:https://www.cnblogs.com/qq849784670/p/9525468.html