python day16

模块

常见的四种模块:

  1、使用python编写的.py文件

  2、把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

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

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

#1、定义:一系列功能的集合体(把一系列功能集合到同一个文件中)

#2、为什么出现模块:很多相似的功能,需要统一管理,将这些功能放在一个文件夹中,该文件就是管理这些功能的集合体,我们命名为模块

#3、怎么使用模块:

    --在要使用模块功能的文件中导入模块:import 模块名    -这个模块名就是用来管理一系列功能的文件名

#4、在哪使用模块:

    --在所有要使用模块中功能的文件中导入并使用模块

导入模块完成的三件事

  --都是绝对路径导入

#首次导入  import 模块名

1、将被导入模块编译形成对应的pyc文件

2、进入模块,从上往下执行模块中的代码,将产生的所有名字存在在该模块文件的全局名称空间中

3、在使用模块的文件中产生一个与模块名同名的名字,指向模块的全局名称空间

# import m2
# <module 'm2' from 'F:\\pyprogram\\day16\\m2.py'>

 #再次导入

  不会走前两步,直接走第三步,在使用模块的文件中产生一个与模块同名的名字,指向模块的全局名称空间

    首次导入会把导入的模块存入内存,再次导入直接在内存中找,就不会进入模块内部再执行一遍了

起别名

import 模块名 as 别名

有些模块名字比较长,起个简短的别名方便后续的调用

需要注意的是:一旦起别名,之前的模块名就失效了,本质上只产生了别名变量指向模块的全局名称空间

模块的分类

大方向分类:内置模块(Built-in) | 自定义模块

自定义又可分为:系统提供 | 第三方提供 | 自己自定义

模块加载的顺序

内存 > 内置 > sys.path(安装环境变量中路径的先后顺序)

#环境变量sys.path就是一个列表,里面路径的顺序决定自定义加载的顺序

环境变量

环境变量:存放路径的list,第一位默认一定是当前执行文件所在的路径

  #环境变量随着项目的运行而产生,存活于内存中,项目运行结束而消失,一旦形成,不管在项目下的那个地方看sys.path都是一样的

import sys

  #sys.path就是环境变量

sys.path.clear()

  #清空环境变量,所有自定义导入都不能使用

  #报错信息:No module named 'm2'

sys.path.append()

sys.path.insert()

  #添加指定路径到环境变量中

from...import语法导入

导入完成三件事

  1、将被导入的模块编译形成对应的pyc文件

  2、进入模块,从上往下执行模块中的代码,将产生的所有名字存放在该模块的全局名称空间中

  3、再导入模块的文件中形成(一个或者多个)名字指向模块全局名称空间的(一个或多个)具体名字

from 模块名 import 模块中的名字1...模块中的名字n

from 模块名 import 名字1 as 别名1,名字2 as 别名2

#from ...import导入依赖环境变量sys.path

#sys.path如果清空,导入就会报错

from ...import *

#模块中会默认添加__all__, __all__就是管理模块中能被*导入的变量们

__all__可以自定义,自定义*能导入的变量们,__all__的list中名字全部可以自定义

__all__ = ['a','b','c','d_','_e']

#系统默认添加的__all__中不会纳入 _开头的名字

#    --所以默认再外界通过from...import * 无法导入_开头的名字

#    --_开头的名字对from...import * 是隐藏的,指名道姓依然可以被外界导入使用(把名字加入__all__中)

链式导入

t1导入m1  ,m1导入m2 ,m2导入m3

执行流程:右键执行t1,在t1导入m1模块的地方直接进入m1,同理m1执行过程遇到导入m2,

会马上进入m2,去执行m2,一直到m3,m3执行完毕,会回到m2中导入m3的语句,接着往下执行,

m2执行完毕会回到m1导入m2的语句,以此类推,一直返回到t1,然后执行完毕。

#在整个执行流程中,遇到任何模块二次导入都不会进入模块,而是直接引用内存中的名称空间

循环导入

循环导入:就是在被导入模块中接着导入当前模块

遇到的基本问题:名字没有产生就是用名字(就会报错)

解决循环导入的问题:先产生名字,再导入模块

  --将会产生循环导入的模块   导入语法延后  -延后导入

问题案例:

#m1.py

import m2

print(y)

x = 100

#m2.py

import m1

print(x)

y = 200

#####解决的方法就是把变量定义提到模块导入之前

转载于:https://www.cnblogs.com/hesujian/p/10816616.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值