python 模块和包

目录

  模块

  模块的导入

  模块的查找顺序

  绝对导入和相对导入

  包

  包的导入

  案例

python 模块

  定义:模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。

  作用:模块可以被别的程序引入,以使用该模块中的函数等功能。

模块导入import

  使用方法:

    1. 导入内置函数时

import os

    2. 导入在相同目录的文件中

    run.py 和 test.py,在run.py文件中导入test.py文件如下:

import test.py

  语法:

import module_name

  位置:

    1. 一般放在文件的开头。

    2. 当导入大量的文件时,包的顺序时,内置,第三方,自定义的包。

    3. 但导入包的名字过长时,可以取别名:

import module_name as mn

  注意:多次导入同一个模块,只会执行第一次导入的结果。

  导入后文件运行流程:

    有两个文件分别是run.py和md.py,run.py为执行文件,md.py为被导入文件,运行run.py

    会创建一个run.py的名称空间,首次导入模块,执行md.py文件,运行md.py中的代码,运行中

    产生的名字和值放到md.py中,在执行的文件(run.py)中会产生一个指向md.py的名称空间的名字(md),

    这个时候run.py中就可以使用md.py中的函数、变量等资源。、

    如图:

模块导入form...import...

  from 语句让你从模块中导入一个指定的部分到当前命名空间中

  语法:

from module_name import name

  说明:

    module_name: 模块名

    name: 模块中类、函数、变量名等

  使用方法: 导入在相同目录的文件中

    run.py 和 test.py,在run.py文件中导入test.py的func函数文件如下:

from test.py import func

  导入后文件运行流程:和import一样

  注意:

    __all__在被导入文件中指的是被导入文件中可以使用的类、函数等。

__all__ = ['money','read1','read2']

模块的查找顺序

  1.先从内存中找

  2.内置中找

  3.sys.path中找(环境变量)

import sys
sys.path.append(r'D:\Python项目\day14\dir1')

form dir1.dir import md

绝对导入和相对导入

  1. 绝对导入必须依据文件所在的文件路径为准

    绝对导入无论在执行文件中还是被导入文件都适用

  2.相对导入

    .代表的当前路径

    ..代表的是上一级路径

    ...代表的是上上一级路径

  注意:相对导入不能再执行文件中使用

  相对导入只能在被导入的模块中使用,使用相对导入就不需要考虑执行文件到底是谁,只需要知道模块与模块之间路径关系

python 包

  定义:是一系列模块的结合体从,形成一个目录。

  包的本质: 也是一种模块。

  包的表现形式:  就是一个文件夹。

  包的创建: 创建一个包,会在包的文件夹下生成一个__init__.py文件

pool/                #顶级包
├── __init__.py     
├── futures          #子包
│   ├── __init__.py
│   ├── process.py
│   └── thread.py
└── versions.py      #子模块

  包的导入:

    包是一种模块的表现形式,因而包或包中的模块都是被导入使用的,而非直接执行。

    导入包所做的事情:

      1、执行包下的__init__.py文件

      2、产生一个新的名称空间用于存放__init__.py执行过程中产生的名字

      3、在当前执行文件所在的名称空间中得到一个名字pool,该名字指向__init__.py的名称空间,

        例如pool.xxx和pool.yyy中的xxx和yyy都是来自于pool下的__init__.py,也就是说导入包时并不会导入包下所有的子模块与子包

  注意:

    创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块

案例

  1. 循环导入问题?

  原因:如果出现循环导入问题,那么一定是你的程序设计的不合理。

  解决方案:

    1. 循环导入问题应该在程序设计阶段就应该避免。

       2. 将循环导入的句式写在文件的最下方

    3. 函数内导入模块

  2. python2和python3包的区别?

    在python3中,即使包下没有__init__.py文件,import 包仍然不会报错;

    而在python2中,包下一定要有该文件,否则import 包报错。

  3 . 包下的__init__py文件是什么?有什么作用?

    __init__.py的主要作用是:

    1. Python中package的标识,不能删除

    2. 定义__all__用来模糊导入

    3. 编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)

    4. 批量导入

    

posted @ 2020-03-30 16:40  zhuang6  阅读(115)  评论(0编辑  收藏  举报