Python学习17:模块和包的导入

笔者: 出处:https://blog.csdn.net/JackMengJin 笔者原创,文章转载需注明,如果喜欢请点赞+关注,感谢支持!

 

目录

Python的模块导入

1.什么是模块?什么是包?

1.1 Python 模块(Module)

1.2 什么是包?

1.3 模块分类

1.4 内置模块

1.5 第三方模块

1.6 为什么包里必须有__init__?

2. 模块导入

2.1导入模块的方法

2.2 导入内置模块

2.3 导入第三方模块

2.4 导入自定义模块

2.5 必须掌握的导入方法

2.6 需要了解的导入方法

2.7 相对路径导入

2.8 注意事项


 

Python的模块导入

1.什么是模块?什么是包?

1.1 Python 模块(Module)

模块其实就是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

.py结尾的文件就是一个python模块。比如比较常见的模块如下:

os模块:

os.remove() 删除文件 
os.rename() 重命名文件 
os.listdir() 列出指定目录下所有文件 
os.chdir() 改变当前工作目录
os.getcwd() 获取当前文件路径
os.mkdir() 新建目录
os.rmdir() 删除空目录(删除非空目录, 使用shutil.rmtree())
os.makedirs() 创建多级目录
os.removedirs() 删除多级目录
os.stat(file) 获取文件属性
os.path.split(filename) 将文件路径和文件名分割(会将最后一个目录作为文件名而分离)
os.path.splitext(filename) 将文件路径和文件扩展名分割成一个元组
os.path.dirname(filename) 返回文件路径的目录部分
os.path.join(dirname,basename) 将文件路径和文件名凑成完整文件路径
os.path.abspath(name) 获得绝对路径
os.path.splitunc(path) 把路径分割为挂载点和文件名
os.path.exists() 判断文件或目录是否存在
os.path.isabs() 如果path是绝对路径,返回True
os.path.realpath(path) 返回path的真实路径
os.path.isdir() 判断name是不是一个目录,name不是目录就返回false

datetime和time模块:


datetime.date.today() 本地日期对象,(用str函数可得到它的字面表示)
datetime.date.isoformat(obj) 当前[年-月-日]字符串表示
datetime.date.fromtimestamp() 返回一个日期对象,参数是时间戳,返回 [年-月-日]
datetime对象:
datetime.datetime.today() 返回一个包含本地时间(含微秒数)的datetime对象
datetime.datetime.now([tz]) 返回指定时区的datetime对象
datetime.fromtimestamp(timestamp[,tz]) 按时间戳返回一个datetime对象,可指定时区,可用于strftime转换为日期表示 
datetime.utcfromtimestamp(timestamp) 按时间戳返回一个UTC-datetime对象
datetime.datetime.strptime(‘2014-03-16 12:21:21‘,”%Y-%m-%d %H:%M:%S”) 将字符串转为datetime对象
datetime.datetime.strftime(datetime.datetime.now(), ‘%Y%m%d %H%M%S‘) 将datetime对象转换为str表示形式
datetime.date.today().timetuple() 转换为时间戳datetime元组对象,可用于转换时间戳
datetime.datetime.now().timetuple()
time.time() 当前时间戳

random模块,这个模块大家肯定不陌生,之前用到过:

random.random() 产生0-1的随机浮点数
random.uniform(a, b) 产生指定范围内的随机浮点数
random.randint(a, b) 产生指定范围内的随机整数
random.randrange([start], stop[, step]) 从一个指定步长的集合中产生随机数

math模块:

ceil:取大于等于x的最小的整数值,如果x是一个整数,则返回x
copysign:把y的正负号加到x前面,可以使用0
cos:求x的余弦,x必须是弧度
degrees:把x从弧度转换成角度
e:表示一个常量
exp:返回math.e,也就是2.71828的x次方
expm1:返回math.e的x(其值为2.71828)次方的值减1
fabs:返回x的绝对值
factorial:取x的阶乘的值
floor:取小于等于x的最大的整数值,如果x是一个整数,则返回自身
fmod:得到x/y的余数,其值是一个浮点数
frexp:返回一个元组(m,e),其计算方式为:x分别除0.5和1,得到一个值的范围
fsum:对迭代器里的每个元素进行求和操作
gcd:返回x和y的最大公约数
hypot:如果x是不是无穷大的数字,则返回True,否则返回False
isfinite:如果x是正无穷大或负无穷大,则返回True,否则返回False
isinf:如果x是正无穷大或负无穷大,则返回True,否则返回False
isnan:如果x不是数字True,否则返回False
ldexp:返回x*(2**i)的值
log:返回x的自然对数,默认以e为基数,base参数给定时,将x的对数返回给定的base,计算式为:log(x)/log(base)
log10:返回x的以10为底的对数
log1p:返回x+1的自然对数(基数为e)的值
log2:返回x的基2对数
modf:返回由x的小数部分和整数部分组成的元组
pi:数字常量,圆周率
pow:返回x的y次方,即x**y
radians:把角度x转换成弧度
sin:求x(x为弧度)的正弦值
sqrt:求x的平方根
tan:返回x(x为弧度)的正切值
trunc:返回x的整数部分

模块其实就是让你能够有逻辑地组织你的 Python 代码段

所以把相关的代码分配到一个模块里可以让代码更好用,更易懂。

在模块能定义函数,类和变量,模块里也能包含可执行的代码。

 

1.2 什么是包?

包是一种通过".模块名"来组织python模块名称空间的方式.我们穿件的每个文件夹都可以被称为包。

但是要注意, 包内必须存在__init__.py文件。

包的定义:文件夹,必须存在__init__.py文件,是模块和子包的集合体。

也就是包和模块的区别:

模块指的是.py结尾的文件,而包指的是一个存在__init__.py文件的文件夹。

包的作用:

包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来。

随着功能越写越多,我们无法将所有功能都放在一个文件夹中,于是我们使用模块去组织功能。

随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性。

总结模块和包的定义:

模块:.py结尾的文件。模块里存放着各种Python 代码段,可以定义类和对象、函数等等。

使用的话直接去导入模块直接去使用相应的代码块。

包:包就是用来存放模块的文件夹,同时该文件夹里有__init__.py文件。

 

1.3 模块分类

模块一般分成3类:内置模块、第三方模块、自定义模块

  • 内置模块:Python自带模块,自己定义好的,一般import+模块即可。
  • 第三方模块:第三方模块需要先在命令行输入pip install requests安装,安装后才能导入。
  • 自定义模块:自己写的模块,通常放在包,from包import模块。

 

1.4 内置模块

常用的内置模块有:os模块、json模块、shelve模块(open函数)、xml模块、logging模块等等,还有上面1.1中提到的其他模块都是内置模块。

相应的内置模块用法后面会详细出专题一一说明,这里先去了解什么是内置模块和有哪些常用的内置模块即可。

 

1.5 第三方模块

常用的第三方模块有:

requests(第三方模块)Requests: HTTP for Humans

对HTTP协议进行高度封装的库,比系统自带的urllib系列的库好用很多。2、3兼容的库。

MySQL-python(第三方模块)https://pypi.python.org/pypi/MySQL-python/1.2.4

把数据写入MySQL里面。

sympy模块(第三方模块):https://docs.sympy.org/0.7.1/guide.html#guide

sympy是一个Python的科学计算库,用一套强大的符号计算体系完成诸如多项式求值、求极限、解方程、求积分、微分方程、级数展开、矩阵运算等等计算问题访问。

等等还有很多强大的第三方模块,后续等需要用到的时候再详细讨论。

自定义模块:

关于自定义模块其实不想说太多,所有自己写的.py文件都是自定义模块,就不单独放在一个三级目录了。

 

1.6 为什么包里必须有__init__?

这是因为将一个包作为模块导入的时候,实际上导入了它的 __init__.py 文件。

而一个包是一个带有特殊文件 __init__.py 的目录。__init__.py 文件定义了包的属性和方法。

__init__可以什么也不定义,可以只是一个空文件,但是必须存在。

如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。

也就是说__init__.py 控制着包的导入行为,它的作用就是使其可以被导入,并可以导入包里的模块。

 


2. 模块导入

2.1导入模块的方法

  • improt 模块名——调用:模块名.功能名
  • import 模块名 as 别名——调用:别名.功能名
  • from 模块名 import 功能名——调用:直接功能名
  • from 模块名 import 功能名 as 别名——调用: 直接拿别名来用
  • from 模块名 import * (用 * 号 一次性导入所有功能)——调用:直接功能名

 

2.2 导入内置模块

导入内置模块是最简单的,直接import+模块即可,不用考虑路径问题:

import math
import logging

 

2.3 导入第三方模块

第三方模块一般存放在site-packages文件夹下:

选用导入方法一般用from 模块名 import 功能名——调用:直接功能名。

如果第三方模块是存放在site-packages文件夹下的话,同样不需要考虑路径问题。

 

2.4 导入自定义模块

导入自定义模块涉及到路径相关的内容。

  • 最简单粗暴的方法:直接将自定义的模块放到python的安装目录下,注意是根目录,不要放在文件夹内。

这样就可以直接导入了,但缺点是一旦自定义的模块多了,python安装目录就会显得十分杂乱。

  • 通过sys模块导入自定义模块的path:

sys模块是python内置的,因此我们导入自定义模块的步骤如下:

  1. 先导入sys模块

  2. 然后通过sys.path.append(path) 函数来导入自定义模块所在的目录

  3. 导入自定义模块。

  • 模块在不同包下如何导入?
from 包名称.模块名 import sth 

import 包名称.模块名

需要注意的是用该方法模块必须在包里,也就是有__init__.py文件的文件夹下才能用此方法,在上面的1.6中提到了。

 

2.5 必须掌握的导入方法

虽然模块导入的方法有很多种。但推荐给大家使用的还是下面两种方法:

 import ...   直接导入模块/包

对于包来说不要直接去导入,因为包太复杂,涉及到非常多的模块才会用包去管理。所以最好不要用import去导其他的东西,也不要用import导入函数、类和对象、模块。

import只用在一个场景,就是用于导入内置模块和第三方模块。

 from ... import ...

这种导入方法更加灵活,可以有很多导入形式,可以导入模块,函数,类,对象,变量。

但使用的时候一定要注意避免导入的函数和内部文件的函数不重名!!!

不重名的情况下才能导入用于导入自定义模块项目的根目录!!!

 

2.6 需要了解的导入方法

  • from sth import*

在使用from sth import* 语法时,可以一次导入指定模块内的所有成员。

但及其不推荐大家使用,是因为它存在潜在的风险。比如同时导入 module1 和 module2 内的所有成员,假如这两个模块内都有一个同样名称的函数,那么当在程序中执行时就会出现异常。

  • from sth import sth as other

这个方法就是给模块起别名,一般情况下也不推荐,防止修改完别名后忘记。

 

2.7 相对路径导入

from. import module

.表示当前目录,就是一个.表示同级目录,也就是当前目录。

..表示上一级目录,用两个..表示。

...表示上上一级,用三个...表示。

以此类推。方法类似Linux。

但是绝对路径导入不被Python官方推荐,所以不建议用,这里只了解即可。

 

2.8 注意事项

最常用的模块导入方法就是import和 from ... import ...,其他的最好不用,了解即可。

导入自定义模块时需要注意自定义模块不要和内置模块或其他模块重名!

包内必须存在__init__.py文件!用来对包的导入和包里模块的导入!

具体模块导入和包的导入会在后面的学习中逐步讲解。

 


以上是《Python学习17:模块和包的导入》的所有内容,敬请期待。原创不易,如果喜欢请点赞和关注,谢谢大家的支持!

想获得免费的学习资料请添加微信公众号——,期待您的关注~

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章