模块主要是由官方或者第三方已经完成之后的库。里面已经封装了部分写好的功能。
如果你从Python解释器退出并再次进入,之前的定义(函数和变量)都会丢失。因此,如果你想编写一个稍长些的程序,最好使用文本编辑器为解释器准备输入并将该文件作为输入运行。这被称作编写 脚本 。随着程序变得越来越长,你或许会想把它拆分成几个文件,以方便维护。你亦或想在不同的程序中使用一个便捷的函数, 而不必把这个函数复制到每一个程序中去。
为支持这些,Python有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们。这样的文件被称作 模块 ;模块中的定义可以 导入 到其它模块或者 主 模块(你在顶级和计算器模式下执行的脚本中可以访问的变量集合)。
模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py
。在一个模块内部,模块名(作为一个字符串)可以通过全局变量 __name__
的值获得。
sys模块
(1) sys.argv :实现从程序外部向程序传递参数。
代码:
import sys
print(sys.argv)#命令行参数List,
print(sys.argv[0])#第一个元素是程序本身路径
输出结果:
['/home/jsj/PycharmProject/myjob/src/Sys_01.py']
/home/jsj/PycharmProject/myjob/src/Sys_01.py
(2)sys.exit([args]):程序中间的退出,arg=0为正常退出。
代码:
def sysexit(args):
print("我是sys.exit的测试模块")
if args == 0:
sys.exit(0)
print("testing")
sysexit(1) #可以输出我是sys.exit的测试模块和testing
sysexit(0)#只可以输出我是sys.exit的测试模块
print("hello")#这一行是无法输出的
输出结果:
我是sys.exit的测试模块
testing
我是sys.exit的测试模块
将sysexit(1)和sysexit(0)作交换则输出的结果如下:
我是sys.exit的测试模块
结论:遇到sys.exit(0)系统将直接退出,不执行下面的代码!!args为其他都是异常退出,为非零。对于非零更深的分类,不同系统规定不一样。
(3)sys.getdefaultencoding()
: 获取系统当前编码,一般默认为ascii。
代码:
print(sys.getdefaultencoding())#获取当前编码,在这里我设置的编码为utf-8
输出结果:
utf-8
(4)sys.setdefaultencoding()
: 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
(5)sys.getfilesystemencoding()
: 获取文件系统使用编码方式,Windows下返回'mbcs',mac下返回'utf-8'.
(6)sys.path
: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到
代码:
print(sys.path)#获取模块路径集合
输出结果:
['/home/jsj/PycharmProject/myjob/src', '/home/jsj/PycharmProject/myjob', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/jsj/PycharmProject/myjob/venv/lib/python3.6/site-packages', '/home/jsj/PycharmProject/myjob/venv/lib/python3.6/site-packages/setuptools-39.1.0-py3.6.egg', '/home/jsj/PycharmProject/myjob/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg']
注意:sys.path.append("自定义模块路径")
一般的标准
(7)sys.platform
: 获取当前系统平台
代码:
print(sys.platform)#获取当前系统平台
输出结果:
linux(这个地方可能不一样)
(8)sys.modules:Python中所有加载到内存的模块都放在sys.modules。当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。如果没有加载则从sys.path目录中按照模块名称查找模块文件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。
(9)sys.stdin,sys.stdout,sys.stderr
: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们.