模块的概念、模块的导入方式【IMPORT 模块名、FROM 模块 IMOPRT 功能】、模块的搜索路径、链式导入&循环导入
今日内容
1. 模块:模块的概念
2.导入的方式:import from import
3. 环境变量:sys.path
4. 导入模块的顺序
5. 循环导入:模块间互相导入
模块
常见的四种模块: module
1. 使用python所编写的 .py文件。
2. 把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹就被称之为包)
3. 使用C编写并直接链接到python解释器的内置模块
4. 已被编译为共享库或DLL的或C++扩展
# 1. 什么是模块:一系列功能的集合体
# 2. 为什么会出现模块: 很多相似的功能,要统一管理,将这些功能放在一个文件中,该文件就是管理这些功能的集合体,我们命名为模块
# 3. 怎么使用模块: 在要使用模块功能的文件中导入模块:import 模块名 (模块名: 用来管理一系列功能的文件名)
# 4. 在那使用模块: 在所有要使用模块中功能的文件中导入并使用模块
导入模板完成的三件事
首次导入:
import 模块名
# 1. 将,被导入的模块编译形成对应的pyc文件
# 2. 进入模块,从上至下执行模块中的代码,将产生的所有名字存放在该模块文件的全局名称空间中
# 3. 在使用模块的文件中,产生一个与模块名(模块文件名)同名的名字,指向模块的全局名称空间
再次导入:
# 不再执行导入模块的前两步,会直接走第三步:在当前模块中产生一个名字,指向第一次导入在内存中产生的全局名称空间
起别名
import 模块名 as 别名
# 重点:导入一旦起别名,原模块名变量失效,本质只产生了别名变量指向模块文件的全局名称空间
模块的分类
# 环境变量:存放路径的list ,第一默认一定是当前执行文件所在的路径
import sys
# sys .path 就是环境变量
# 如果清空环境变量:所有导入就都将不能使用
sys. path. clear()
# 添加指定路径到环境变量
sys . path . append() # 添加
sys . path . insert() # 插入
导入模块的顺序
内存 > 内置 > sys.path (安装环境变量中路径的先后顺序逐一加载)
from...import 语句导入
# 导入完成的三件事
# 1. 将被导入的模块编译形成对应的pyc文件
# 2. 进入模块,从上至下执行模块中的代码,将产生的所有名字存放在该模块文件的全局名称空间中
# 3. 在导入模块的文件中形成(一个或者多个)名字指向模块全局名称空间中的(一个或者多个)具体名字
from 模块名 import 模块中的名字1,。。。模块中名字n
from 模块名 import 名字 as 别名
## form ... import 导入依赖环境变量,sys. path
from...import* 语法
# 模块中默认会添加__all__, 而__all__的功能,就是管理模块中能被*导入的变量们
# __all__可以自定义,自定义* 能导入的变量,__all__的list 中名字全部可以自定义
# 系统默认添加的__all__中不会纳入 以_开头的名字,
---所以默认在外界通过from...import *无法导入_开头的名字
---_开头的名字对from...import * 是隐藏的,然而指名道姓依然可以被外界导入使用
链式导入
如果定义三个模块:m1,m2,m3, 然后m1模块中导入m2, m2 模块中导入m3, 然后再创建一个ti文件,在t1 中调用m1,那么他的执行流程会变为:
在t1文件中执行m1,在执行m1的过程中会遇到导入的m2,会马上进入m2去执行m2,在m2中又会碰到导入的m3,会马上去执行m3,m3执行完毕后会返回m2中导入m3的语句,接着执行m2,m2执行完毕回到m1,依次类推,最后返回t1
# 然而在整个执行流程中,遇到任何模块的二次导入,都是直接引用内存中的名称空间,不会再次进入模块
循环导入
# 循环导入的问题点:名字没有产生就使用名字
# 解决循环导入:先产生名字,在导入模块
-----将会产生循环导入的模块,导入语法延后,-延后导入
# 问题
# m1,py
import m2
print(m2,y)
x = 666
# m2.py
import m1
print(m2,x)
y = 888
此处的print就会报错,因为在全局变量没有产生就开始打印。
# 解决办法
# m1,py
x = 666
import m2
print(m2,y)
# m2,py
y = 888
import m1
print(m2,x)
此处是把全局变量提到调用模块的前面,所以此处的print能找到对应变量。
模块的概念、模块的导入方式【IMPORT 模块名、FROM 模块 IMOPRT 功能】、模块的搜索路径、链式导入&循环导入的更多相关文章
- day17跨文件夹导入模块,模块的两种被执行方式,包,直接使用包中模块,包的管理
复习 ''' 1.模块 -- 一系列功能的集合体,用文件来管理一系列有联系的功能,该文件我们称之为模块,文件名就是模块名 -- import | from...import 来导入模块,从而使用模块中 ...
- Python 模块搜索路径
Python 会在什么地方寻找文件来导入模块? 使用命名为 path 变量的存储在标准 sys 模块 下的一系列目录名和 ZIP 压缩文件. 你可以读取和修改这个列表.下面是在我的 Mac 上 Pyt ...
- HIVE几种数据导入方式
HIVE几种数据导入方式 今天的话题是总结Hive的几种常见的数据导入方式,我总结为四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询 ...
- 2.Hive的几种常见的数据导入方式
好久没写Hive的那些事了,今天开始写点吧.今天的话题是总结Hive的几种常见的数据导入方式,我总结为四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3 ...
- day16模块,导入模板完成的三件事,起别名,模块的分类,模块的加载顺序,环境变量,from...import语法导入,from...import *,链式导入,循环导入
复习 ''' 1.生成器中的send方法 -- 给当前停止的yield发生信息 -- 内部调用__next__()取到下一个yield的返回值 2.递归:函数的(直接,间接)自调用 -- 回溯 与 递 ...
- python 装饰器、递归原理、模块导入方式
1.装饰器原理 def f1(arg): print '验证' arg() def func(): print ' #.将被调用函数封装到另外一个函数 func = f1(func) #.对原函数重新 ...
- python学习笔记:模块——自定义模块的3种导入方式
一.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块.如果不懂 ...
- python与模块的导入方式
今日所得 模块 import from...import... 循环导入 相对导入 绝对导入 软件开发目录规范 模块 模块:是一系列功能的集合体 模块的三种来源:1.内置模块(Python解释器自带的 ...
- Python模块导入方式
import导入方式 from...import导入方式 from...import... 导入模块相当于在此文件中写了所导入函数名(对比c/c++中的.h文件来理解),所以在之后使用导入的函数直接 ...
随机推荐
- SSM框架中使用日志框架
在 pom,xml 配置 Log4j jar 添加一个 mybatis_log.xml 文件 完整配置信息 <?xml version="1.0" encoding=&quo ...
- react 项目 mock数据
前言 我们都知道在实际的开发阶段,后端接口开发是和前端开发同步进行,甚至迟于前端的进度,这就直就导致前端需要等待后端接口的时间. 这种情况就严重导致前端开发缓慢,那这时候前端的开发人员只能写静态模拟数 ...
- hdu 6070 Dirt Ratio
题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6070 (2017 Multi-University Training Contest - Team ...
- Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽 Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...
- java+HTML5实现断点续传
一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框 ...
- clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- Linux网络编程三、 IO操作
当从一个文件描述符进行读写操作时,accept.read.write这些函数会阻塞I/O.在这种会阻塞I/O的操作好处是不会占用cpu宝贵的时间片,但是如果需要对多个描述符操作时,阻塞会使同一时刻只能 ...
- Java基础__Integer类型中的自动装箱
Integer类型的自动装箱:就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱. ...
- Selenium 的页面加载以及几种等待的问题
1. PageLoadStrategy : 当调用driver.get("https://xxxx.xxx.xxx")来访问某页面时,get方法通常会阻塞浏览器直到页面完全加载后才 ...
- JDBC之——原理和连接数据库
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...