【Python实战】模块和包导入详解(import)
1.模块(module)
1.1 模块定义
通常模块为一个.py文件,其他可作为module的文件类型还有".pyo"、".pyc"、".pyd"、".so"、".dll"。
module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让coder重点放在高层逻辑上。
module能定义函数、类、变量,也能包含可执行的代码。
1.2 模块作用
1.大大提高了代码的可维护性。
2.编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
3.使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
1.3 模块来源
①Python内置的模块(标准库)②第三方模块 ③自定义模块。
1.4 模块导入本质
把引用的python文件解释一遍。
1.5 模块导入方法
import module #引用一个模块module
import module as md #引用模块module,使用别名md。代码中只能写成md,不能写module
import module1, module2 #同时引用多个模块module1和module2
from module import logger #仅引用module中的logger函数。代码中可直接写成logger,无需使用module.logger
from module import logger as frank #引用module中的logger函数,使用别名frank。代码中只能直接写成frank,不能写logger
1.6 模块导入案例解析
1.6.1 import引入
模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行,模块spam定义如下:
#spam.py
print('from the spam.py') money=1000 def read1():
print('spam->read1->money',money) def read2():
print('spam->read2 calling read')
read1() def change():
global money
money=0
模块定义好后,我们可以使用 import语句来引入模块,语法如下:
import module1[, module2[,... moduleN]
案例1:第一次引用spam模块时,可执行spam中语句。
import spam
执行结果:
from the spam.py
案例2:模块间的同名函数或变量完全不冲突。
#测试money和spam.money不冲突(变量)
import spam
money=10
print(spam.money)
执行结果:
from the spam.py
1000
#测试read1与spam.read1不冲突(函数)
import spam
def read1():
print('========')
spam.read1()
执行结果:
from the spam.py
spam->read1->money 1000
#执行spam.change()操作的全局变量money仍然是spam中的
import spam
money=1
spam.change()
print(money)
执行结果:
from the spam.py
1
案例3:为已经导入的模块起别名的方式对编写可扩展的代码很有用
假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,例如:
if file_format == 'xml':
import xmlreader as reader #reader为模块别名
elif file_format == 'csv':
import csvreader as reader #reader为模块别名
data=reader.read_date(filename)
案例4:在一行导入多个模块
import sys,os,re
1.6.2 from..import..导入
1.7 模块搜索路径
2. 包(package)
通常包总是一个目录,包目录下为首的一个文件便是 __init__.py,然后是一些模块文件和子目录。假如子目录中也有 __init__.py 那么它就是这个包的子包。
可以使用import导入包,或者from + import来导入包中的部分模块。
3.import的特点
import语句是可以在程序中的任意位置使用。一个程序中多次引用同一个模块时,模块不会被重复导入。
为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的import语句。
# 文件test1.py
import test2
print test2.attr
# 文件test2.py
import test1
attr = 'hello world'
# 文件test.py
import test1
执行test.py,输出结果为:hello world
说明:test.py中已经引用了test1,当文件test2.py再次引用test1时,则忽略引用。
参考文档:
Python 3.x可能是史上最详解的【导入(import)】
【Python实战】模块和包导入详解(import)的更多相关文章
- Python之模块和包导入
Python之模块和包导入 模块导入: 1.创建名称空间,用来存放模块XX.py中定义的名字 2.基于创建的名称空间来执行XX.py. 3.创建名字XX.py指向该名称空间,XX.名字的操作,都是以X ...
- python模块与包的详解
一模块 1.什么是模块? 常见场景:一个模块包含python定义和声明的文件,文件名就是模块名字加上.py的后缀 2.为何要是用模块 如果你退出python解释器然后重新进入,那么你之前定义的函数或者 ...
- python常用模块numpy解析(详解)
numpy模块 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 后打开浏览器输入网址http://local ...
- python random模块(随机数)详解
使用前要先导入random模块 import random random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random ...
- Python之路-pandas包的详解与使用
什么是pandas pandas是一种Python数据分析的利器,是一个开源的数据分析包,最初是应用于金融数据分析工具而开发出来的,因此pandas为时间序列分析提供了很好的支持.pandas是PyD ...
- python linecache模块读取文件用法详解
linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行. linecache.getlines(filename) 从名为filename的文件中得到 ...
- Python urllib模块urlopen()与urlretrieve()详解
1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据.参数u ...
- python常用模块:包的使用、init作用、相对导入绝对导入与内置函数
今天主要讲的内容有: 一.包的详解二.相对导入和绝对导入三.内置模块补充 一.包的详解 1.包是什么 包其实也是一个模块,只不过是一个大的模块下包含一堆模块的载体 本质上也是一个文件夹,与普通文件的区 ...
- kafka实战教程(python操作kafka),kafka配置文件详解
kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...
随机推荐
- Python之路【第七篇】:Python装饰器
阅读目录 一.装饰器 1.装饰器的概念 #装饰器定义:本质就是函数,功能是为其他函数添加附加功能 二.装饰器需要遵循的原则 #原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 装饰 ...
- 关于raft算法
列出一些比较好的学习资料, 可以经常翻一番,加深印象 0 raft官方git 1 raft算法动画演示 2 Raft 为什么是更易理解的分布式一致性算法 3 raft一致性算法 4 Raf ...
- 一份.NET 容器化的调查小结
小编在上个月在微信公众号"dotnet跨平台" 做了一个针对.NET 容器化的调查:https://mp.weixin.qq.com/s/oszbuIORT0G8XLLgMZzkn ...
- 借助Chrome和插件爬取数据
工具 Chrome浏览器 TamperMonkey ReRes Chrome浏览器 chrome浏览器是目前最受欢迎的浏览器,没有之一,它兼容大部分的w3c标准和ecma标准,对于前端工程师在开发过程 ...
- 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归
一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...
- 1.2环境安装「深入浅出ASP.NET Core系列」
官网 在介绍安装环境之前,先介绍周边信息,比如微软net官网. https://www.microsoft.com/net 这个网站是学习微软技术栈比较权威的地方,包括环境下载,学习,架构,文档,社区 ...
- Docker最全教程——数据库容器化之持久保存数据(十一)
上一节我们讲述了SQL Server容器化实践(注意,SQL Server现在也支持跨平台),本节将讲述如何持久保存数据,并且接下来将逐步讲解其他数据库(MySql.Redis.Mongodb等等)的 ...
- Python 为什么要使用描述符?
学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Descriptor(描述符)特性可以排得上号. 描述符 是Python 语言独有的特性,它不仅在应用层使用,在语言的 ...
- void类型和void* 的用法
C语言中的void 和 void * 总结 1.void的作用 c语言中,void为“不确定类型”,不可以用void来声明变量.如:void a = 10:如果出现这样语句编译器会报错:variab ...
- c# 抽象类,抽象方法使用(abstract)
入行一年多,在这个IT行业,开发技术主要使用的是.NET,而对应使用的高级语言自然就是c#了.从2017年7月入职后,在平时的工作过程中,只记得使用一些方法去完成逻辑功能,而很少去深究一些语法特性,特 ...