一、编程(程序设计)语言简介
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、动态语言和静态语言
静态类型语言: 一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。
动态类型语言: 一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。
强类型语言: 一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。
弱类型语言: 一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 '12' 和整数 3 进行连接得到字符串'123',然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。
Python 既是动态类型语言 (因为它不使用显示数据类型声明),又是强类型语言 (因为只要一个变量获得了一个数据类型,它实际上就一直是这个类型了),bash是弱类型语言
5、面向过程和面向对象
面向过程(Proceduce Oriented)是一种面向过程的思维方式。当我们面临一个问题时,我们首先关注处理这个问题的流程(过程)。
以指令为中心,由指令处理数据;如何组织代码解决问题
比如,我们面临一个问题:“将大象装入冰箱”。最常用的思路就是直接关注过程,这样更加直接、更加有效,很快就可以完成问题。
解决方案如下:
第一步、打开冰箱
第二步、装入大象(大象如何抱起?本步骤可能面临非常多的细节问题)
第三步、关上冰箱
通过上述事例,在日常生活中面临很多问题,我们都是采用面向过程的思维方式来处理。日常问题一般都可以使用面向过程来处理。但是,如果面临复杂的问题,面向过程可能无能为力,这时候就需要使用面向对象的思维方式。
面向对象(Object Oriented)就是以分类的方式进行思考和解决问题。面向对象的思维方式适合于处理复杂的问题。那么,什么叫做复杂的问题?
以数据为中心,所有的处理代码都围绕数据展开;如何设计数据结构组织数据,并提供对此类数据所允许的处理操作。
复杂,往往指的就是“数量相当庞大”。在哲学上,我们有句话叫“量变引起质变”。当数量达到一定级别,就会出现复杂的管理问题。比如:我约一个人晚上吃饭,这个事情很简单,我只要关注整个过程就可以了。但是,如果我今天晚上约了3万人共进晚餐。这时候,首要的问题不是每个人吃饭的问题,而是这3万人怎么处理的问题?最直接的想法就是首先对着3万人进行分类处理。3万人可以分为:不吃饭的、喝粥的、吃素的、吃荤的、吃烧烤的等等。这样,我就可以让员工分类对各种情况进行合理的处理。
这种简单的、朴素的分类思想,实质上就是面向对象的思维方式。依次我们发现,这种分类思想也是管理学的一个核心理念。
面向过程和面向对象的区别:
面向过程适合处理简单的事情,直接关注流程,简单有效。
面向对象适合处理复杂的事情,先使用面向对象的方式对整体关系作出分类,然后,根据不同的类深入细节的处理。
面向过程和面向对象的联系:
面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。
面向对象如何离开了面向过程,就无法实现真正的落地,成为无源之水。
用最简短的话来解释“面向过程”和“面向对象”的区别该怎么说?
面向过程是一件事“该怎么做“,面向对象是一件事“该让谁来做”,然后那个“谁”就是对象,他要怎么做是他自己的事,反正最后一群对象合力能把事做好就行了。
python支持面向过程也支持面向对象。
二、Python简介
1、Python简介
Python是一种面向对象、解释型计算机程序设计语言,强类型动态语言
由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
2000年发布2.0;2008年发布3.0不向上兼容
Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public License)协议。
Python语法简洁清晰,有且只有一个最优解
特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C )很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中 有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C 重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
python的定位:
解释型通用语言(通用是相对于DSL(领域专用语言(如puppet所用的语言)来说的))
优雅 明确 简单
使用场景:web,自动化脚本,数据分析
python之禅:
要完整了解python的哲学理念,可以在任意一个python解释器中键入import this命令,这是一个隐藏的彩蛋:描述了一系列python的设计原则。
代码语言:javascript复制[root@Python ~]# python
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
>>>
翻译和解释:
Python之禅 by Tim Peters
优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
当存在多种可能,不要尝试去猜测
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
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的文件,内容如下:
代码语言:javascript复制#!/usr/bin/python
import platform
print platform.uname()
第一行为shebang,即执行脚本时通知内核要启动的解释器
第二行通过import导入一个python模块platform
第三行打印platform模块的uname方法的执行结果
给予此脚本执行权限,并执行即可
python程序可以分解成模块、语句,表达式和对象
程序由模块构成
模块包含语句
语句包含表达式
表达式建立并处理对象
表达式是”某事“,而语句是”做某事(即指令)“
例如:”3 4“是某事,而”print 3 4“则是做某事
语句的特性:他们改变了事物,
例如:赋值语句改变了变量,print语句改变了屏幕输出等
3、python IDE(集成开发环境)
内置IDE:
Python的各个常见发行版都有内置的IDE,虽然它们的功能一般不够强大完整,但简便易得就是最大的优势。 对于初学者来说,它们也是上手的最 好选择,可以让你更专注于语言本身而不会被繁复的IDE分散精力。
IDLE:
IDLE是Python标准发行版内置的一个简单小巧的IDE,包括了交互式命令行、编辑器、调试器等基本组件,足以应付大多数简单应用。 IDLE是用纯 Python基于Tkinter编写的的,最初的作者正是Python之父Guido van Rossum本人。
Eclipse和PyDev
PythonWin
Komodo
Wingware
PyCharm:推荐
四、Python的安装
1、使用新版本的Python
简单方法:
1)编译安装新版本至某特定路径
不要动系统默认版本的Python,很多程序都依赖于python
python编译安装:
代码语言:javascript复制[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/python
[root@Node3 Python-2.7.6]# make && make install