为什么学习Python?
作为一名集成商的网络工程师:
1、 给客户设备巡检、配置备份、配置对比、日志分析,只能人工一份一份的抓取、对比、分析。苦!
2、 互联网边界防火墙策略配置、内网服务映射,配置测试的时,还需要一条条telnet地址和端口,在面对上百条配置的时候,内心是崩溃的。网上找过一些工具,基本不符合自己的需求。苦!
3、 听说会python工资水平都能提高!!希望不是被骗
首先对python作个介绍,对于我这种对语言认识为0的人,只能从网上那摘抄了:
一、python介绍
python的创始人为吉多·范罗苏姆,1989年的圣诞节期间,吉多·范罗苏姆为了再阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
目前Python主要应用领域:
云计算:云计算最火的语言,典型应用OpenStack
WEB开发:众多优秀的WEB框架,众多大型网站均为Python开发,Youtube、Dropbox、豆瓣… ,典型WEB框架有Django
科学运算、人工智能 典型库NumPy、SciPy、Matplotlib、Enthought librays,pandas
系统运维:运维人员必备语言
金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于C,C++,Java。尤其擅长策略回测。
图形GUI:PyQT,WxPython,Tkinter
Python是一门什么样的语言?
编程语言主要从以下几个角度进行分类,编译兴和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看以下:
编译型和解释型
我们先看看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序对我们的源代码进行转换,生成相对应的可执行代码。这个过程说的专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler)。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了。但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织,这时编译各个文件时就会生成目标文件(Object file)而不是前面说的可执行文件。一般一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已经是可执行代码了,但由于只是整个项目的一部分,所以我们还不能直接运行。待所有的源文件的编译都大功告成,我们就可以最后把这些半成品的目标文件“打包”成一个可执行文件了,这个工作由另一个程序负责完成,由于此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接(Link),而负责链接的程序就叫 链接程序(Linker)。链接程序除了链接目标文件外,可能还又各种资源,像图标文件啊、声音文件啊什么的,还要负责去除目标文件之间的冗余重复代码,等等,所以.. .. 也是挺累的。链接完成之后,一般就可以得到我们想要的可执行文件了。
上面我们大概地介绍了编译型语言的特点,现在再看看解释型。从字面上看,“编译”和“解释”的确都有“翻译”的意思,他们的区别则在于翻译的时机安排大不一样。打个比方:加入你打算阅读一本外文书,而你不懂外文,那么你可以找一名翻译,给他时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读;或者,让这么翻译辅助你阅读,让他一句一句给你翻译,如果你想往回看某个章节,他也得重新给你翻译。
两种方式,前者就相当于我们刚才所说的编译型:一次把所有的代码转换成机器语言,然后写成可执行文件;而后者就相当于我们要说的解释型:在程序运行的前一刻,还只有源程序而没有可执行程序,而程序每执行到源程序的某一条指令,则会有一个称之为解释型程序的外壳程序将源代码转换成二进制代码以供执行,总言之,就是不断地解释、执行、解释、执行……,所以,解释型程序是离不开解释程序的。像早期的BASIC就是一门经典的解释型语言,要执行BASIC程序,就得进入BASIC环境,然后才能加载程序源文件、运行,解释型程序中,由于程序总是以源代码的形式出现,因此只要有相应的解释器,移植几乎不成问题。编译型程序虽然源代码也可以移植,但前提是必须针对必须针对不同的系统分别进行编译,对于复杂的工程来说,的确是一件不小的时间损耗,况且很可能一些细节的地方还是要修改源代码。而且,解释型程序省却了编译的步骤,修改调试也非常方便,编译完毕之后即可立即运行,不必像编译型程序一样每次进行小小的改动都要耐心等待漫长的Compiling Linking...这样的编译链接过程。不过凡事有利有弊,由于解释型程序是将编译的过程放到执行过程中,这就决定了解释型程序注定要比编译型慢上一大截,像几百倍的速度差距也是不足为奇的。
编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal(Delphi)、VB等基本都可视为编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高,对不同系统平台间的兼容性有一定要求的程序则通常使用解释型语言,如Java、JavaScript、VBScript、Perl、Python等等。
既然编译型与解释型各有优缺点又相互对立,所以一批新行的语言都有把两者折衷起来的趋势,例如Jave语言虽然比较接近解释型语言的特征,但在执行之前已经预先进行一次预编译,生成的代码是介于机器码和Java源代码之间的中间代码,运行的时候则由JVM(Java的虚拟机平台,可视为解释器)解释执行。它既保留了源代码的高抽象,可移植的特点,又已经完成了对源代码的大部分预编译工作,所以执行起来比纯解释型程序要快许多。而像VB6(或者以前版本)、C#这样的语言,虽然表面上看生成的是.exe可执行程序文件,单VB6编译之后实际生成的也是一种中介码,只不过编译器在前面安插了一段自动调用某个外部解释器的代码(该解释程序独立于用户编写的程序,存放于系统的某个DLL文件中,所有以VB6编译生成的可执行程序都要用到它),以解释执行实际的程序体。C#(以及其他.net的语言编译器)则是生成.net目标代码,实际执行时则由.net解释系统(就像JVM一样,也是一个虚拟平台)进行执行。当然.net目标代码已经相当低级,比较接近机器语言了,所以仍将其视为编译语言,,而且其移植程度也没有Java号称的这么强大,Java号称是“一次编译,到处执行”,而.net则是“一次编码,到处编译”。总而言之,随着设计技术与硬件不断发展,编译型与解释型两种方式的界限正在不断变得模
动态语言和静态语言
通常我们说的动态语言和静态语言是指动态类型的语言和静态类型的语言。
(1) 动态类型的语言:动态类型的语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型语言编译的时候,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就时一种典型的动态类型语言,其它的各种脚本语言,如VBScrip也多少属于动态类型语言。
(2) 静态类型语言:静态类型语言和动态类型语言正好相反,它的数据类型是在编译期间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其它静态类型语言还又C#、Jave等。
强类型定义语言和弱类型定义语言
(1) 强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某各数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子,如果您定义了一个整型变量a,那么程序根本不能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2) 弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反。一个变量可以赋予不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如Python是动态语言,是强类型定义语言(类型安全的语言);VBScrip是动态语言,是弱类型定义语言(类型不安全的语言);Java是静态语言,是强类型定义语言(类型安全的语言)。
Python的种类:
Cpython
Python的官方版本,使用C语言实现,使用最为广泛,Cpython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
Jython
Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后再JVM上运行。
IronPython
Python的C#实现,IronPython将Python代码编译成C#字节码,然后再CLR上运行(与Jython类似)。
PyPy(特殊Special)
Python实现的Python,将Python的字节码再编译成机器码。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是再交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的,但内核其实都是调用了IE。