模块初识
模块有标准库和第三方库
标准库:python自带的一些常用模块,直接导入就可以使用。
第三方库:需要单独下载安装。
模块其实就是一个.py的文件,这个文件就称之为模块,模块中会有很多不同的方法
sys模块
注意在起名字的时候,不要与库中模块的名字重复,否则当你导入模块的时候可能会导入的.py文件是错误的。
模块一定要在这些目录下面,否则导入的时候就会找不到,会无法加载
Lib是python的标准库目录
第三方库安装的模块一般都会存在site-packages目录中,site-packages在Lib目录中
如果找不到导入的模块在什么位置,可以在pycharm中通过ctrl + 鼠标左键,点击图中import后面这个sys,就会打开该模块文件,然后右键该文件就会有copy path选项,复制路径后在电脑中打开即可。
print (sys.argv) ##打印相对路径
在pycharm中打印
在cmd中打印
可以看到cmd中打印的是相对路径,pycharm打印出绝对路径是因为pycharm本身会将绝对路径打印出来,所以实际sys.argv还是相对路径。
通过python运行py文件时,后面可以跟参数,图中的1、2、3都是参数,打印的时候会把参数也打印出来。
有时做测试、运维运行脚本就需要传一些参数,根据输入的参数来决定做什么操作。
print (sys.argv[2])
列表索引位置从0开始,所以通过[2],将对应位置的2这个参数给打印出来了
os模块
与系统交互的操作,比如调用系统文件、程序、命令等,只要是与系统有交互的操作都是用os模块。
1.
import os
os.system('dir')
os.system可以使用Windows命令,这里使用的是dir,用来查看当前目录下的文件;
通过python执行后,可以看到成功的执行了,至于图中看到的乱码,这是因为python使用utf-8,与Windows 使用的默认编码不同导致的,这个没有关系。
2.
a = os.system('dir) #只执行命令,不保存结果
将os.system('dir)赋值给a,然后在打印a,正常思路我们可能认为会将dir的结果赋值给a,然后在把这个结果打印出来,图中可以看到只是将os.system('dir)这个动作给执行了,直接输出到屏幕上,而不是打印a这个变量。
打印出来的是0这个数字,在系统中0表示执行命令成功,非0表示执行不成功。
使用os.popen可以保存结果
打印的时候,并不是保存的结果,而是内存地址
要打印保存的结果,需要在后面加上.read(),因为os.popen将内容存到内存的一个地方,需要通过.read()来读取一下。
3.
os.mkdir('new_dir')
创建一个新的文件夹目录,名为new_dir
在电脑上已经创建了这个文件夹。
模块变量路径
当前sys_test中的代码
打开另一个py文件,把sys_test当做第三方模块导入,然后运行test.py
执行结果
我们将sys_test.py放到另一个目录中,在试着去执行test.py
因为sys_test.py的移动,在test中之前导入的模块就会被删除
重新导入模块,可以看到在sys_test下面有红色波浪线,表示找不到该模块
执行test.py也报错
这说明了python会先从当前的目录下去找模块,然后去从site-packages变量目录中去找,而且不会到子目录中去找,所以当把sys_test移动到子目录中后,就会报错。
pyc
将sys_test.py文件copy到site-packages中,执行之后在site-packages中有一个__pycache__的目录,在该目录中会有一个sys_test.cpython-36.pyc的文件。
在python2.X中不会有__pycache__目录,只有运行模块时才会产生pyc文件;
python是解释型语言,像C语言一类的是编译性语言;
编译型语言就是将代码执行前,通过编译器将所有代码编译成系统能理解成的语言,就是编译成0和1,运行的时候就直接和CPU交互,运行起来就会较块。
解释型语言就没有编译的过程,而是在程序运行时通过解释器,对程序代码逐行的进行解释,解释成系统理解的语言(0和1);
编译型语言因为在执行的时候少了翻译这一步,所以运行会较快,当然这是相对的。
Java语言在执行代码前,会对代码有一个编译优化的过程,相当于你自己编写的代码和系统之前的中间的一个代码,这个中间代码是为了更好的能去被执行;python也有这么个过程,这个过程就生成了pyc文件,pyc文件可以看到优化的结果。
当python程序运行时,编译的结果则是保存在位于内存中的PycodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中找pyc文件,如果找到,则直接载入,否则重复上面的过程。
当py原文件修改更新后,再次运行程序时,会检查py文件和pyc文件的时间,如果更新时间一致,那么这会直接运行预编译过的pyc文件来执行代码,否则py文件更新时间最新的话,则会运行py文件并更新最新的pyc文件。