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语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间,这样会极大的浪费资源。所以我们一般不用+号做字符串拼接。

其他具体拼接方式请见:猛击这里

②字符串的常用功能

详细操作,请:猛击这里

posted @ 2017-02-07 13:31  帅丶高高  阅读(397)  评论(0编辑  收藏  举报