模块和包
Posted aladl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块和包相关的知识,希望对你有一定的参考价值。
模块分为三种:
1. 自定义模块
2. 内置模块
安装python解释器的时候跟着装上的
3 .开源模块(第三方模块/拓展模块)
没有安装python解释器的时候安装的那些功能
什么是模块?
有的功能开发者自己无法完成,这样的话需要借助已经实现的函数/类来完成这些功能
你实现不了的功能都有别人替你实现了
别人写好的一组功能
分类 管理方法
节省内存
提供更多功能
导入模块
python之所以应用越来越广泛,在一定程度上也依赖于其为程序员踢动了大量的模块以供以使用,如果想要使用模块,则需要导入
import module
from module.xxx import xx
from module.xxx import xx as rename
from module.xx.xx import *
导入模块其实就是告诉python解释器去解释那个python文件
导入一个py文件,解释器解释该py文件
导入一个包, 解释器解释该包下的__init__.py文件
import这个语句相当于什么?
import这个模块下相当于执行了这个模块所在的py文件
from import的时候发生了什么?
命名空间的变换
不导入并不意味着不存,而是没有建立文件到其他模块的引用
当模块中导入的方法或者变量 和本文件重名的时候,那么这个名字只代表最后一次对它赋值的那个方法或者变量
引用模块后运行一个py文件的两种方式
1. 以模块形式运行
2. 直接运行
在编写py文件的时候
所有不在函数和类中封装的内容都应该写在
if __name__ == "__main__": 下面
在模块的导入中,不要产生循环应用问题
如果发生循环导入了就会发现明明写在这个模块中的方法偏偏找不到
自定义模块中导入的方式:
paramiko:
paramiko是一个用于远程控制的模块,使用该模块可以对远程服务器进行命令或文件操做,值得一说的是,fabric和ansible内部的远程管理就是使用paramiko 来实现
内置模块"
os 模块
用于提供系统级别的操做
1. os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2. os.chdir(‘dirname‘) 改变当前脚本工作没目录;相当于shell下的cd 3. os.surdir 返回当前目录: ( ‘ . ‘ ) 4. os.makedirs(‘dirname1 / dirname2‘) 可生成多层递归目录 5. os.removedirs(‘dirname1‘) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,一次类推 6. os.mkdir(‘dirname‘) 生成单机目录,相当于shell中mkdir dirname 7. os.mkdir(‘dirname‘) 删除单及目录,若目录不为空则无法删除,报错; 相当于shell中rmdir dirname 8. os.listdir(‘dirname‘) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 9. os.remove() 删除一个文件 10. os.rename(‘oldname‘,‘newname‘) 重命名文件/目录 11. os.stat(‘path/filename‘) 获取文件/目录信息 12. os.sep 输出操作系统特定路径分隔符,win下位‘\‘ ,linux下位‘/‘ 13. os.linesep 输出当前平台使用的行终止符,win下为‘ ‘,linux下为‘ ‘ 14. os,pathsep 输出用于分割我那件路径的字符串操作 15. os.name 输出字符串指示当前使用平台. win->‘nt‘ ; linux-> ‘posix‘ 16. os.system(‘bash command‘) 运行shell命令,直接显示 17. os.environ 获取系统环境变量 18. os.path.split(path) 将path分割成目录和文件名二元组返回 19. os.path.dirname(path) 返回path的目录.其实就是os.path.split(path) 的第一个元素 20. os.path.basename(path) 返回path最后的文件名.如何path以 / 或 结尾,那么就会返回空值.即21.os.path.split(path) 的第二个元素 22. os.path.exists(path) 如果path存在,返回True; 如果path不存在,返回False 23. os.path.isabs(path) 如果path是绝对路径,返回True 24. os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 25. os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 26. os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 27. os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 28. os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 |
os是系统相关的模块,file是文件操作相关的模块
json 和pickle
json: 用于字符串 和python数据类型之间进行转换
pickle: 用于python特有的类型和python的数据 类型之间的转换
json模块提供了四个功能: dumps,dump, loads, load
pickle模块提供了四个功能: dumps, dump ,loads, load
执行系统命令
os.system
os.spawn
call 执行命令,返回状态码
check_call执行命令,如果状态码是0,则返回0, 否则抛出异常
__call__flask
class A:
def __call__(self,*args,**kwargs):
print(‘执行了call方法‘)
包
集合了一组py文件,提供了一组复杂功能的东西
为什么要有包呢?
当提供的功能比较复杂,一个py文件写不下的时候
包中都有什么?
至少拥有一个__init__.py
简单的导入:
直接导入模块
import 包.包.包.模块
包.包.模块.模块
from 包.包 import 模块 推荐
模块.变量
导入包:
必须对所有的__init__文件全部处理一次
如果希望导入包之后,模块能够正常的使用,那么需要自己去完成init文件的开发
包中模块的绝对导入
包中模块的相对导入
使用了相对导入的模块只能当作模块执行,不能被当作脚本执行
(绝对路径和相对路径,差不多一个意思)
小知识:
import 模块
导入这个模块之后 模块内的所有名字 就都可以通过模块来引用了
模块名.名字
from 模块 import 名字
导入这个模块中的某个名字之后,这个名字就可以直接使用了
名字是变量,直接用
名字是函数 函数名() 就是调用
名字是类名 类名() 就是实例化
模块的循环引用 ----- 不能(模块不能循环引用)
把模块当成脚本运行:
你希望 某一段代码 在被当作模块导入的时候 不要执行 就把它写在 if__name__ ==‘__main_‘下面:
sys.path 一个自定义模块能否被导入,就看sys.path列表中有没有这个模块所在的绝对路径
包:
如果是直接导入一个包,那么相当于执行了这个包中的__init__ 文件
并不会帮你把这个包下面的其他包以及py文件自动的导入到内存
如果你希望直接导入包之后,所有的这个包下面你的其他包以及py 文件都能直接通过包来引用
那么你就要自己处理__init__ 文件
以上是关于模块和包的主要内容,如果未能解决你的问题,请参考以下文章