day2-模块初识、运行过程,数据类型
一、模块初识
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持
1、标准库
python的标准库有很多,我们先认识sys和os模块,因为这两个模块在开发中用的最多
①sys
sys模块操作模块搜索路径、使用sys模块查找内建模块、使用sys模块查找已导入的模块等
#! /usr/bin/env python # -*- coding:utf-8 -*- # __auther__ == zhangqigao import sys print(sys.argv)#打印的是模块本身的相对路径 #输出 $ python test.py helo world ['test.py', 'helo', 'world'] #把执行脚本时传递的参数获取到了 print(sys.path)#输出Python的执行路径 #输出 ['D:\\PycharmProjects\\pyhomework\\day2', 'D:\\PycharmProjects\\pyhomework', 'D:\\Python\\Python35\\python35.zip', 'D:\\Python\\Python35\\DLLs', 'D:\\Python\\Python35\\lib', 'D:\\Python\\Python35', 'D:\\Python\\Python35\\lib\\site-packages'] #其中 'D:\\Python\\Python35\\lib\\site-packages' 是第三方库安装的路径
②os
os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作
#! /usr/bin/env python # -*- coding:utf-8 -*- # __auther__ == zhangqigao import os cmd_reslut = os.system("dir") print(cmd_reslut) #输出 #命令被执行,执行完成后会返回一个状态:0表示执行成功,其他数字表示执行失败 cmd_reslut = os.popen("dir").read() print(cmd_reslut) #输出 #命令被执行,且执行后的结果返回出来
③两个完美结合
#! /usr/bin/env python # -*- coding:utf-8 -*- # __auther__ == zhangqigao import sys,os os.system(''.join(sys.argv[1:]))#把用户的输入的参数当作一条命令交给os.system来执行
2、第三方库
Python除了自带的标准库之外,还有其他的第三方库,第三方库直接自己下载安装即可,下载安装的第三方库是在D:\\Python\\Python27\\lib\\site-packages下面(其中D:\\Python\\Python27是你自己安装Python的路径)
如果是自己需要开发第三方库,把自己写好的模块,复制到D:\\Python\\Python27\\lib\\site-packages,然后直接import即可,步骤如下:
①复制到D:\\Python\\Python27\\lib\\site-packages下
②import导入自己开发的第三方库
二、Python的运行过程
1、解释型语言和编译型语言
解释型语言:没有编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行。如:ruby、python
编译型语言:在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。如:C、C++
C语言的编译运行过程:
此外:随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
2、 Python到底是什么
其实Python和Java一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
java的运行过程:
3、Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
如图:
注:如果源代码被改动,则执行.py文件时,程序会比较.py和.pyc文件的时间,如果源代码的时间是最新的,则会重新编译生成最新的.pyc文件
三、数据类型
1、数字
①int(整型)
在32位机器上,整数的位数是32位,所以它的取值范围是-2**31~2**31-1 即:-2147483648~2147483647
原理如图:
注:因为最大数不能>=2**31,所以2**31-1 比如8进制,最大数就是2**3-1
在64位机器上,整数的位数是64位,所以它的取值范围是-2**63~2**63-1 即:-9223372036854775808~9223372036854775807
②long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注:从Python3开始已经被废弃掉长整型的数据类型,只有在Python2.2以上的版本才会有,且在2.2版本中,如果数据发生溢出,则会自动将int转换为long,
所以在长整数数据后面不加字母L也不会导致严重后果了。
eg:
Python2.7
>>> type(2**30) <type 'int'> >>> type(2**32) <type 'long'>
Python3.5
>>> type(2**30) <class 'int'> >>> type(2**32) <class 'int'>
③float(浮点型)
浮点数用来处理实数,即带有小数的数字 如:3.14
④complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:这边复数只做了解,在我的编程生涯中几乎用不到
2、布尔值
真或假
真:用1或True表示
假:用0或False表示
3、字符串
hello word
①万恶的+号
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间,这样会极大的浪费资源。所以我们一般不用+号做字符串拼接。
其他具体拼接方式请见:猛击这里
②字符串的常用功能
详细操作,请:猛击这里