05_01、模块

一、模块简述

  (一)、什么是模块

  模块是一系列功能的集合体,分为三大类

    1、内置模块

    2、第三方模块

    3、自定义模块

    一个python文件本身就是一个模块,文件名m.py,模块名叫m

  (二)、模块的表现形式

  1、使用python编写的.py文件,(一个py文件就是一个模块)

  2、已编译为共享库或DLL的C或C++扩展

  3、把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py的文件,称为包,也是多个py文件的组合)

  4、使用C编写并链接到python解释器的内置模块

 

 

  (三)、为何要用模块

  1、内置与第三方模块,拿来即用,极大地提高了自己的开发效率

  2、自定义的模块

    可以将程序的各部分功能提取出来放到一个模块中为大家共享使用

 

二、如何使用模块

  (一)导入模块  

模块的导入方式有import 和from...import...两种

  1、import 句式

1、导入 

import md

2、运用

md.x

05_01、模块

 

 

  模块被导入时会发生三件事

1.运行执行文件,产生一个执行文件的全局名称空间

2.运行被导入文件

3.导入文件中的名字放入到导入文件的名称空间

4. 在执行文件的名称空间中有一个md的变量指向导入文件的名称空间

  注意:       

1. 模块会执行,但是导入多次,只会执行一次

2. 在自己的名称空间中如果有与导入文件相同的名字,在调用的时候,指名道姓的调用,不会产生冲突的

 

  2、 from...import...句式

单个导入:from md import money

多个导入:from md import moeny,name,gender

05_01、模块

  from...import句式首次被导入:
1. 产生一个执行文件的名称空间
2. 会运行导入文件
3. 产生一个导入的名称空间
4. 在执行文件中产生一个money,执行导入文件的money,导入文件中的其他没有被导入的不能在执行文件中使用,如果想使用,继续导入过来就可以使用

 

  (二)模块灵活运用的补充方式

  1、起别名

给模块名起别名  import mdddddddddddd as d 

给模块中的某一个名字起别名  from md import read1 as r

  起别名通常用来给名称过长的模块或变量使用,方便书写

  同时可以保证文件名不和内置模块名冲突

  2、多个模块的连续导入

1、可以一行导入一个

    import time
    import os
    import sys

2、可以一行导入多个

模块:mport time,os,sys  注意:这里推荐是用一行导入一个,因为格式简明清晰

变量名:from mdddddddddddddddddddddddddd import a,b,c,d

 

  3、通用导入

from md import *

它的作用相当于import md,可以使用md里面所有的变量名

 

 

  (三)if __name__ == '__main__'的运用

 

__name__内置方法的特性:  

    如果print(__name__)当前所在文件是执行文件:打印__name__返回值为'__main__'(字符串类型)

    如果print(__name__)当前所在文件是导入文件,运行导入它的文件打印出的__name__返回值是被导入的模块名

根据其特性:

在执行模块中写入if __name__ == '__main__',可以通过if

在导入模块中写入if __name__ == '__main__',不可以通过if

05_01、模块

 

  (四)循环导入问题

循环导入不允许出现

解决方式1:导入语句放到末尾

解决方式2:导入语句放在函数中

 

  (五)模块的查找顺序

 

  1、查找顺序

1. 先从内存中查找
2. 从内置中查找
3. 从sys.path中

  2、如果在执行文件中找不到导入模块,解决方案:

1.通过sys.path.append()添加导入文件路径到相关路径集

  补充知识:

  sys模块  

  sys.path  相关路径集

  sys.path.append()  添加路径到相关路径集

05_01、模块

 

2、从当前级向下级导入模块的方法

from aaa import bbb

from aaa.bbb.ccc import ddd

3、从当前级向上级导入模块的方法

pass

 

  (六)限制导入 __all__=['a','b']

__all__的内置方法是只能允许本模块中的数据a和数据b被导入

 

三、相对导入和绝对导入

  1、绝对导入

有sys.path和form...import两种方式

1、sys.path.append(绝对路径)

2、form...import

如:from aaa import m2(因为aaa已经在环境变量中)

 注意:绝对导入,默认都是以执行文件为准,从sys.path中查找

05_01、模块

 

  2、相对导入

相对导入主要使用的句点符

一个句点符 .  代表的是当前目录

两个句点符 .. 代表的是上一级目录

 

eg:      

  from . import m2  同层级下在m1中可以直接相对导入同层级m2
  from .bbb import m2  根目录下m1可以相对导入根目录下bbb文件夹下的m2

  from .bbb.ccc import m2  根目录下m1可以相对导入根目录下bbb文件夹下的ccc文件夹中的m2

 

3、特别注意:在执行文件中,不能出现相对导入

05_01、模块

05_01、模块

 

原文链接: https://www.cnblogs.com/erfeier/p/15811739.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    05_01、模块

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/186143

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 上午11:04
下一篇 2023年2月12日 上午11:04

相关推荐