模块初识:
- 标准库:不需要安装直接可以导入的库
- 第三方库:需要下载安装
初识标准库
- sys模块
- python文件命名的时候,不要与库中模块名字重复,否则导入模块时可能会导入错误的.py文件
-
模块一定要在如下的目录下面,不然就会导入的时候找不到,无法加载
-
Lib是python的标准库目录,第三方的安装模块一般都会存在于site-packages中
- 如果找不到导入模块的位置,可以通过pycharm中ctrl+ 鼠标左键,如下图点击import后的模块名称,打开模块文件,然后右键该文件点击copy path,复制在电脑中打开即可
-
上面的输出结果是一个数组,这数组就是模块调用的路径
-
print(sys.argv) #打印相对路径
打印输出应该是相对路径,但是我们看到的是绝对路径,因为是在pytharm中打印,pycharm本身会将绝对路径打印出来。如果在cmd中执行此python代码,你看到的结果就是相对路径
-
通过python运行py文件时,后面可以跟参数,如下
-
图中1.2.3都是参数,打印的时候也会把参数打出来,有时候做运维测试的时候,需要传参,可以根据输入的参数来绝对做什么操作
-
程序计数从0开始,打印参数,将对应的参数打印出来
- os模块 : 与系统交互的操作,比如调用系统文件、程序、命令等,只要是与系统有交互的操作都是用os模块。
-
-
import os
os.system('dir')os.system可以使用Windows命令,这里使用的是dir,用来查看当前目录下的文件;
通过python执行后,可以看到成功的执行了,至于图中看到的乱码,这是因为python使用utf-8,与Windows 使用的默认编码不同导致的,这个没有关系。
-
a = os.system('dir) #只执行命令,不保存结果
将os.system('dir)赋值给a,然后在打印a,正常思路我们可能认为会将dir的结果赋值给a,然后在把这个结果打印出来,图中可以看到只是将os.system('dir)这个动作给执行了,直接输出到屏幕上,而不是打印a这个变量。
打印出来的是0这个数字,在系统中0表示执行命令成功,非0表示执行不成功。
-
使用os.popen可以保存结果
打印的时候,并不是保存的结果,而是内存地址
要打印保存的结果,需要在后面加上.read(),因为os.popen将内容存到内存的一个地方,需要通过.read()来读取一下。 -
os.mkdir('new_dir')
创建一个新的文件夹目录,名为new_dir
在电脑上已经创建了这个文件夹。-
模块变量路径
当前os_test中的代码
打开另一个py文件,把os_test当做第三方模块导入,然后运行test.py
执行结果
我们将os_test.py放到另一个目录中,在试着去执行test.py
因为os_test.py的移动,在test中之前导入的模块就会被删除
重新导入模块,可以看到在os_test下面有红色波浪线,表示找不到该模块执行test.py报错
这说明了python会先从当前的目录下去找模块,然后去从site-packages变量目录中去找,而且不会到子目录中去找,所以当把sys_test移动到子目录中后,就会报错。
-
-
3.
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文件。
参考链接:http://www.cnblogs.com/manonglaobing/articles/7420641.html