一、编程语言简介
1、高级语言与低级语言
一般来讲高级语言和低级语言有一下特点:
高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好
低级语言:实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差
我们都知道CPU运行的是二进制指令,所有的语言编写的程序最终都要翻译成二进制代码,但是为什么实现会有以上众多差异呢?下面以C语言为高级语言代表,汇编语言为低级语言代表来解释一下。
越低级的语言,形式上越接近机器指令,汇编语言就是与机器指令一一对应的。而越高级的语言,一条语句对应的指令数越多,其中原因就是高级语言对底层操作进行了抽象和封装,使编写程序的过程更符合人类的思维习惯,并且极大了简化了人力劳动。也就是说你用高级语言写一句,会被转换成许多底层操作,大部分的工作交给了负责转换的机器(即编译器),从而人力得到了解放。因为机器就是用来为人类提供便利的,所以说高级语言的出现是计算机发展的必然结果。
完成一项工作的工作量是不变的,机器做的 多了,人就做的就少了,同时人对程序的很多细节的控制性也减弱了。各种语言都是在这个平衡点附近纠结。从C/C++的注重机器运算效率的优化,到C#/JAVA注重开发效率的优化。人操作起来更加方便了,更高效了,代价就是,机器要处理的东西更多,运算效率被进一步压缩。但是这个压缩在许可范围内,那么这也是一种进步。
2、编译性语言、解释性语言
计算机是不能理解高级语言,当然也就不能直接执行高级语言了。计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算机才能运行高级语言编写的程序。
翻译的方式有两种,一个是编译,一个是解释。
两种方式只是翻译的时间不同。编译型语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
3、脚本语言
脚本语言(Script languages,scripting programming languages,scripting languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。虽然许多脚本语言都超越了计算机简单任务自动化的领域,成熟到可以编写精巧的程序,但仍然还是被称为脚本。
4、动态语言和静态语言
静态语言
是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。例如:C++、Java、Delphi、C#等。
动态语言
是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。例如:Python、Ruby、Perl等。
5、面向过程和面向对象
面向过程(Proceduce Oriented)是一种面向过程的思维方式。当我们面临一个问题时,我们首先关注处理这个问题的流程(过程)。
以指令为中心,由指令处理数据;如何组织代码解决问题
比如,我们面临一个问题:“将大象装入冰箱”。最常用的思路就是直接关注过程,这样更加直接、更加有效,很快就可以完成问题。
解决方案如下:
第一步、打开冰箱
第二步、装入大象(大象如何抱起?本步骤可能面临非常多的细节问题)
第三步、关上冰箱
通过上述事例,在日常生活中面临很多问题,我们都是采用面向过程的思维方式来处理。日常问题一般都可以使用面向过程来处理。但是,如果面临复杂的问题,面向过程可能无能为力,这时候就需要使用面向对象的思维方式。
面向对象(Object Oriented)就是以分类的方式进行思考和解决问题。面向对象的思维方式适合于处理复杂的问题。那么,什么叫做复杂的问题?
以数据为中心,所有的处理代码都围绕数据展开;如何设计数据结构组织数据,并提供对此类数据所允许的处理操作。
复杂,往往指的就是“数量相当庞大”。在哲学上,我们有句话叫“量变引起质变”。当数量达到一定级别,就会出现复杂的管理问题。比如:我约一个人晚上吃饭,这个事情很简单,我只要关注整个过程就可以了。但是,如果我今天晚上约了3万人共进晚餐。这时候,首要的问题不是每个人吃饭的问题,而是这3万人怎么处理的问题?最直接的想法就是首先对着3万人进行分类处理。3万人可以分为:不吃饭的、喝粥的、吃素的、吃荤的、吃烧烤的等等。这样,我就可以让员工分类对各种情况进行合理的处理。
这种简单的、朴素的分类思想,实质上就是面向对象的思维方式。依次我们发现,这种分类思想也是管理学的一个核心理念。
面向过程和面向对象的区别:
面向过程适合处理简单的事情,直接关注流程,简单有效。
面向对象适合处理复杂的事情,先使用面向对象的方式对整体关系作出分类,然后,根据不同的类深入细节的处理。
面向过程和面向对象的联系:
面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。
面向对象如何离开了面向过程,就无法实现真正的落地,成为无源之水。
用最简短的话来解释“面向过程”和“面向对象”的区别该怎么说?
面向过程是一件事“该怎么做“,面向对象是一件事“该让谁来做”,然后那个“谁”就是对象,他要怎么做是他自己的事,反正最后一群对象合力能把事做好就行了。
二、Python简介
1、Python简介
Python是一种面向对象、解释型计算机程序设计语言,
由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。
Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中 有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
2、Python使用场景
shell编程:
bash脚本更易于实现;自找麻烦,大材小用
编程(控制)语言:胶水语言
框架:使用框架完成特定应用程序开发,如web,Django开发
3、Python程序执行流程
源码 --> 在PVM中编译字节码 -->在PVM(解释器,python虚拟机)中执行
4、Python的实现(解释器)
CPython
原始、标准的实现方式
Jython
用于与Java语言集成的实现
IronPython
用于与.NET框架集成的实现
5、Python性能优化工具
Psyco
Python语言的一个扩展模块,可以即时对程序代码进行专业的算法优化,可以在一定成都上提高程序的执行速度,尤其是在程序中有大量循环时。
目前开发工作已经停止,由PyPy所接替
PyPy
PyPy是Python实现的Python解释器,
Python语言的动态编译器,是Psyco的猴急项目
可以运行在linux的32位和64位,MacOSX和Windows 32位平台中
Shed Skin
Python编译器,能够将Python代码转换成优化的C++代码,
三、python程序
1、编写、执行Python代码
交互式解释器
直接启动python,其显示信息取决于程序版本及操作系统等
python程序文件
交互式模式下的程序执行完成后难以再次运行
将编写的程序保存至文件(.py)中方便多次运行
python的此类包含了一些列预编写好的语句的程序文件称为模块
能够直接运行的模块文件通常称作脚本(即程序的顶层文件)
2、pythoen源程序文件
python源程序通常以.py为扩展名
例如,新建一个名为firstpycode.py的文件,内容如下:
#!/usr/bin/python
import platform
print platform.uname()
第一行为shebang,即执行脚本时通知内核要启动的解释器
第二行通过import导入一个python模块platform
第三行打印platform模块的uname方法的执行结果
给予此脚本执行权限,并执行即可
python程序可以分解成模块、语句,表达式和对象
程序由模块构成
模块包含语句
语句包含表达式
表达式建立并处理对象
表达式是”某事“,而语句是”做某事(即指令)“
例如:”3+4“是某事,而”print 3+4“则是做某事
语句的特性:他们改变了事物,
例如:赋值语句改变了变量,print语句改变了屏幕输出等
3、python IDE(集成开发环境)
IDLE:标准python环境提供
Eclipse和PyDev
PythonWin
Komodo
Wingware
PyCharm
python过程型程序设计快速入门,,
python支持面向过程也支持面向对象
四、Python的安装
1、使用新版本的Python
简单方法:
1)编译安装新版本至某特定路径
不要动系统默认版本的Python,很多程序都依赖于python
2)pyenv
python编译安装:
[root@Node3 ~]# yum install readline-devel #先安装这个依赖包,没有安装的化,在python里删除和方向都不方便使用
[root@Node3 ~]# tar xf Python-2.7.6.tar.xz
[root@Node3 ~]# cd Python-2.7.6
[root@Node3 Python-2.7.6]# ./configure --prefix=/usr/local/python27
[root@Node3 Python-2.7.6]# make && make install
安装ipython:
ipython是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。
[root@Node3 ~]# tar xf ipython-1.2.1.tar.gz
[root@Node3 ~]# cd ipython-1.2.1
[root@Node3 ipython-1.2.1]# ls
COPYING.txt examples PKG-INFO scripts setupegg.py setup.py
docs IPython README.rst setupbase.py setupext
[root@Node3 ipython-1.2.1]# /usr/local/python27/bin/python2.7 setup.py build
[root@Node3 ipython-1.2.1]# /usr/local/python27/bin/python2.7 setup.py install
[root@Node3 ~]# ls /usr/local/python27/bin/
2to3 ipcontroller iptest pycolor python2 python2-config
idle ipengine ipython pydoc python2.7 python-config
ipcluster iplogger irunner python python2.7-config smtpd.py
[root@Node3 ~]# ln -sv /usr/local/python27/bin/python2.7 /usr/local/bin
[root@Node3 ~]# ln -sv /usr/local/python27/bin/ipython /usr/local/bin/ipython