一、python的起源
python的创始人为吉多.范罗苏姆
1989年圣诞节,吉多.范罗苏姆决心开发一个新的解释程序,作为ABC语言的继承。ABC是由吉多参加设计的一种数学语言,专门为非程序员设计,但ABC语言没有成功,究其原因,吉多认为是非开放造成,决心在python中避免这一错误,并获得了非常好的效果。
1991年,第一个python解释器诞生,用c语言实现的库文件(可扩展性强,开源。)
解释器和编译器:
计算机不能直接理解机器语言(010101)之外的语言,所以必须要把程序员所写的程序语言(c语言,java等)翻译成机器语言,计算机才能执行程序,将其他语言翻译成机器语言的工具,被称为编译器。
编译器翻译的方式有俩种:一个是编译(使用编译器的语言叫做编译型语言),一个是解释(使用解释器的语言叫做解释型语言)。
编译型语言–编译器–最终可执行文件:同一编译,一次执行
选择编程语言的因素之一:跨平台性。
跨平台性:就是开发完成的程序可以在不同的操作系统上运行。
如果使用了某一个操作系统的编译器,那么此编译器最终声称的可执行文件就只能在这个操作系统上运行,不能在其他操作系统上运行(不能跨平台)
解释型语言–解释器(逐行解释每一句源代码):读一行翻译一行,翻译一行执行一行。
只需要在不同的操作系统上安装不同的解释器。
##编译型语言执行速度快
##解释型语言跨平台能力强
编译型语言和解释型语言
(1)编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。
(2)解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。一般来说,现有的解释性语言都是采用的逐行解释一句,执行一句这样的方式来构建的。这样解释性语言每执行一次就要翻译一次,效率比较低。
(3)编译型语言和解释型语言的区别
解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译
这样解释性语言每执行一次就要翻译一次,效率比较低 编译型与解释型,两者各有利弊
(4)前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object
Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB
等等。
(5)编译性语言不如解释性语言跨平台性好…编译性语言例如c语言:
用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件)。
解释性语言,例如java语言,java程序首先通过编译器编译成class文件,如果在windows平台上运行,则通过windows平台上的java虚拟机(VM)进行解释。如果运行在linux平台上,则通过linux平台上的java虚拟机进行解释执行。所以说能跨平台,前提是平台上必须要有相匹配的java虚拟机。如果没有java虚拟机,则不能进行跨平台
(6)敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
二、为什么用python
代码量少,开发速度快。
同样的问题,用不同语言解决,代码量差距很多,一般情况下,python是java的1/5。
三、python的特点
python是一个完全面向对象的语言
面向对象是一种思维方式,也是一门程序设计技术。
面向对象:要解决一个问题前,首先考虑谁来做,怎么做,谁的责任,最后把事情做好就行。要解决复杂的问题,就可以找多个不同的对象,各司其值,共同实现。
python拥有一个强大的标准库(www.python.org)
python社区提供了大量的第三方库:非官方开发,由python爱好者开发的(标准库虽然强大,但力量有限,当今最热门的都包含在内)
四、python的优缺点
*优点
简单易学、免费开源、面向对象、丰富强大的库、可扩展性(如果需要一段关键代码运行的更快或者希望某些算法不开源,可以把这部分程序用c或者c++编写,然后在python程序中使用他们)
缺点:
运行速度(相较于跨平台性的优越,在带宽影响下较慢的速度可以忽略不计)
中文资料匮乏。
(1)单行语句和命令行输出问题
很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i
而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。
(2)独特的语法
这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。
即便是很有经验的Python程序员,也可能陷入陷阱当中。
(3)运行速度慢
这里是指与C和C++相比。
Python (计算机程序设计语言)
面向对象与面向过程的本质的区别
一、面向对象与面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了; 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
可以拿生活中的实例来理解面向过程与面向对象,例如五子棋
面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。
如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。
面向过程与面向对象的优缺点
用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。
蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。
蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。
到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。
盖浇饭的好处就是"菜"“饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。蛋炒饭将"蛋”“饭"搅和在一起,想换"蛋”"饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。
简单的总结一下!
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低
原文链接:https://blog.csdn.net/jerry11112/article/details/79027834
编译型语言:将高级语言转换成目标代码即二进制程序后才可以执行
解释型语言:源代码逐条转换成目标代码并逐条执行,程序运行时需要源代码和解释器
五.python3的安装
python3:
1.拿到源码包(3.6) --->去官网下载(www.python.org)
2.tar zxf Python-3.6.4.tgz -C /opt/
3.cd /opt/ cd Python-3.6.4/
4.进入解压目录编译和安装:
(1)yum install gcc zlib zlib-devel openssl-devel -y #解决依赖性
(2)./configure --prefix=/usr/local/python3 --with-ssl
--prefix:安装路径 --with-ssl:添加ssl加密
(3)make && make install:安装
5.测试:cd /usr/local/python3/bin ./python3
6.添加python3的命令到环境变量中
临时添加:
[root@server bin]# export PATH="/usr/local/python3/bin:$PATH"
[root@server bin]# python3
Python 3.6.4 (default, Aug 26 2019, 21:44:00)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
永久添加:
[root@server bin]# echo export PATH="/usr/local/python3/bin:$PATH" >> ~/.bashrc
[root@server bin]# vim ~/.bashrc ##查看是否添加成功。
[root@server bin]# source ~/.bashrc
[root@server bin]# python3
Python 3.6.4 (default, Aug 26 2019, 21:44:00)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> quit
Use quit() or Ctrl-D (i.e. EOF) to exit
>>>
退出方法:ctrl+d 或者quit()
新手最好在虚拟机装好,然后再真机将虚拟机安装好的python下载,因为虚拟机内存小,虚拟机运行的时候可能带不了,因此在真机中使用。
如果直接在物理机(真机)上面安装3.6的版本的解释器,可能我们会因为一些错误操作改动了真机原来的2.7版本,导致yum源出问题
因此我先在虚拟机上面进行安装,再将安装好的目录从虚拟机拷贝到真机,这样真机也就可以使用3版本的解释器了
可以查看环境变量的命令:env和echo $PATH