Python是一种广泛使用的解释型、高级和通用的编程语言。Python由荷兰数学和计算机科学研究学会的Guido van Rossum创造,第一版发布于1991年,它是ABC语言的后继者,也可以视之为一种使用传统中缀表达式的LISP方言。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
Python支持多种编程范型,包括函数式、指令式、结构化、面向对象和反射式编程。Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库,提供了适用于各个主要系统平台的源码或机器码。
Python是一种跨平台的计算机程序设计语言,是ABC语言的替代品,属于面向对象的动态类型语言,最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
python前景比较好,python是 人工智能首选的编程语言,人工智能处于一个高速发展的阶段,市场需求亮逐渐增大,而这方面的人才比较少,人才缺口大,同时python职位薪酬也是比较可观的。
Python:Python是一种面向对象、交互式计算机程序设计语言。它的特点是语法简捷而清晰。由于它的易学、易读的特性,有些学校用它代替C语言作为基础入门的语言。
优点
1.简洁易懂
编程者接触某一种语言,一般不可能从底层开始了解,就像大学里计科系会在第一学期开C语言,而不是第一学期开汇编语言,计算机组成原理,编译原理这些比较深入的课程,C语言是建立在前面几门学问之上的没错,但是作为高级语言,它显然更贴近生活,能让零基础的人更快上手,计算机相关的教育,都是这样自顶向下的过程(当然你一定要说数学是计算机的基础,从小学开始学数学是自底向上,那我也无法反驳),总之,高级语言作为很多人接触计算机这门学问的第一步,相当于整个软件行业的脸面,自然不能生得组成原理,操作系统这样生涩坚晦的”凶恶“面孔,所以高级语言的上手难度直接决定了它的在人力市场中的受欢迎程度
python就是这样一种”面色慈爱“的高级语言,或许对于一个中国人而言,python和其他语言一样都是一堆英文字母,但是从外国人的角度看,写python就像是写作一样顺畅自然,同样,即使对于不以英语为母语的国家,python也以关键字少,结构简单,语法清晰让初学者迅速上手,我记得我入职的时候,从python零基础开始,一周左右就可以顺畅地实现扫雷,俄罗斯方块这类简单的游戏逻辑了,而同样的情况在我刚刚大一的时候,我刷了一个月的HUD才比较顺畅地从高中的Pascal转到C,除了对部分尚未熟悉OOP(面向对象程序设计)的新手可能会有一定的理解难度,python其他的地方学习起来基本上不会有太大的阻力
而且python的代码格式很好,这个和python将缩进作为语法辨识的其中一部分有直接的关系(当然,一定要不按照这个规则来也是可以的,用“;”连接不同行的代码,然后将代码拼成佛祖的形状企图反弹一切bug,但是大部分正常人不会这么做的,不是吗?)由于约定采用缩进作为代码分段的判断依据,一来规范了所有人的代码格式,二来减少了分号,括号这类的使用,这样使用者就不用将注意力放在这些随时跟在代码头尾,千篇一律的字符
2.跨平台
python本质上是用C写的(我知道有Java写的python,不过那可以称之为Jython),所以,一切有C编译器的地方,就等于有python解释器,python和C的关系有点类似于银票和银子的关系,一切可以用银子的地方,一般也适用于银票,因为银票本身就是银子的代表,银票的信誉基于银子作为一般等价物的信誉,这同样适用于python,而C作为一种横行天下数十载的大佬,自然早就有了大量适配的平台,这也为python的成长打下了基础
3.可扩展性
python之所以没有私有,公有,抽象这些东西,完全是出于一种自由的设计思想,事实上在python中实现私有,公有,抽象这些东西并不是做不到的,只需要自己封装一些东西就行了,比如抽象类,只需要让所有默认接口raise异常即可,这个类就从意义上成为了抽象类,同理,私有,公有也可以自己去实现,python没有在底层默认写好,就是出于一种自由的设计思想,虽然抽象类的适用范围很广,但是谁也不能打包票说任何地方都是有抽象类比没有抽象类更好,于是python就将有没有抽象类的选择留给了使用者。
当然,这只是python内在的一个细节,实际上python的可扩展性不仅仅在对内的设计思想上,它对外也是如此,这里的对外即不同语言之间的配合使用,用我身边的例子来说,游戏的服务端可以用C作为底层游戏引擎,python作为逻辑脚本,就像是调用自己亲儿子一样调用C编写的引擎接口,除了跳转不进去之外(可以用文档填补),其他浑然天成,仿佛C语言的底层不存在一样。
缺点
1.效率
动态语言的硬伤自然就是慢,比Java还慢,和C相比差距大概在五倍左右,大规模计算差距超过10倍
这也是python最大的一个问题,有得必有失,python的效率问题也不是技术原因导致的,而且python也对这方面有所弥补,那就是对效率敏感的地方可以用C重写,以达到预期的效率需求,但是治标不治本,追求python的高开发效率的同时,就得舍弃一些性能上的追求。
2.GIL
这是属于python的一个历史遗留问题,当然我所接触的游戏服务端设计刻意避开了多线程的问题,在代码中尽量避开了这一个尴尬的部分(当然据大佬说,多线程容易出错,不好管理),虽然有世界服这种多进程的服务器设计思路,但是大部分维持数据同步的手段都是在脚本里写的,而不是python语言自身实现
1、更加人性化的设计
Python的设计更加人性化,具有快速、坚固、可移植性、可扩展性的特点,十分适合人工智能;开源免费,而且学习简单,很容易实现普及;内置强大的库,可以轻松实现更大强大的功能。
2、总体的AI库
AIMA:Python实现了从Russell到Norvigs的“人工智能:一种现代的方法”的算法;
pyDatalog:Python中的逻辑编程引擎;
SimpleAI:Python实现在“人工智能:一种现代的方法”这本书中描述过的人工智能的算法,它专注于提供一个易于使用,有良好文档和测试的库;
EasyAI:一个双人AI游戏的python引擎。
3、机器学习库
PyBrain 一个灵活,简单而有效的针对机器学习任务的算法,它是模块化的Python机器学习库,它也提供了多种预定义好的环境来测试和比较你的算法;
PyML 一个用Python写的双边框架,重点研究SVM和其他内核方法,它支持Linux和Mac OS X;
scikit-learn旨在提供简单而强大的解决方案,可以在不同的上下文中重用:机器学习作为科学和工程的一个多功能工具,它是python的一个模块,集成了经典的机器学习的算法,这些算法是和python科学包紧密联系在一起的;
MDP-Toolkit这是一个Python数据处理的框架,可以很容易的进行扩展。它海收集了有监管和没有监管的学习算饭和其他数据处理单元,可以组合成数据处理序列或者更复杂的前馈网络结构。新算法的实现是简单和直观的。可用的算法是在不断的稳定增加的,包括信号处理方法,流型学习方法,集中分类,概率方法,数据预处理方法等等。
4、自然语言和文本处理库
NLTK开源的Python模块,语言学数据和文档,用来研究和开发自然语言处理和文本分析,有windows、Mac OSX和Linux版本。
Python具有丰富而强大的库,能够将其他语言制作的各种模块很轻松的联结在一起,因此,Python编程对人工智能是一门非常有用的语言。可以说人工智能和Python是紧密相连的。如果你想要抓住人工智能的风口,Python是必不可少的助力。
人工智能上使用Python比其他编程语言的好处
1、优质的文档
2、平台无关,可以在现在每一个*nix版本上使用
3、和其他面向对象编程语言比学习更加简单快速
4、Python有许多图像加强库像Python Imaging Libary,VTK和Maya 3D可视化工具包,Numeric Python, ScienTIfic Python和其他很多可用工具可以于数值和科学应用。
5、Python的设计非常好,快速,坚固,可移植,可扩展。很明显这些对于人工智能应用来说都是非常重要的因素。
6、对于科学用途的广泛编程任务都很有用,无论从小的shell脚本还是整个网站应用。
7、它是开源的。可以得到相同的社区支持。
python语言被认为是最受欢迎的语言 du语言在云计算中,OpenStack的典型应用。
Python在大数据处理方面的优势有:
1、开发速度快捷,代码量少。
2、内部类型使用成本比较低。
3、数据处理包丰富,使用方便;
4、可以采用Python处理百万级数据。
Python比较适合大数据的抓取、载入和分发,相对其他语言而言更简单高效。一般来说抓取信息需要用到HTTP,以达到切换IP地址的目的,配合完成抓取任务。针对大数据的处理,Python也存在着一定的局限性,可以使用Python做整个流程的框架,核心CPU密集操作采用C语言等编程语言。
1、抓取网页本身的接口
相比与其他静态编程语言,如Java、C#、C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl、shell,python的urllib2包提供了较为完整的访问网页文档的API。
此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这时我们需要模拟useragent的行为构造合适的请求,譬如模拟用户登录、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests、mechanize。
2、网页抓取后的处理
抓取的网页通常需要处理,比如过滤html标签、提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。其实以上功能很多语言和工具都能做,但是用python能够干得最快、最干净。
Python可以通过套接字编程和socket模块操纵底层网络,从而为Python所在的操作系统和网络设备之间搭建一个低层次的网络接口。此外,Python模块还可以通过Telnet、SSH和API与网络设备进行更高级别的交互。本章将深入探讨如何在Python中使用Telnet与SSH模块在远程设备上建立连接和执行命令。
Python的另一个优点是它具有许多简化开发过程的框架。根据您的工作,可能需要不同的框架。
下面是4个著名的框架:
4个著名的Python web框架
Django:此框架非常适合成熟的Web应用程序和中档可扩展项目。它具有内置功能,并允许重复使用代码,对代码的不同组成部分进行一致的修改以及其他简化Web开发的功能。Django可与Oracle SQL,PostgreSQL,MySQL和其他知名数据库完美配合。
Pyramid:使用此框架,您可以从小规模开始,并根据需要扩展规模。金字塔可以与各种数据库和应用程序一起使用,也可以与插件一起扩展-开发人员可以添加所需的任何功能。当您需要在一项任务中实施各种解决方案时,这很方便。
TurboGears:TurboGears由Repoze,WebOb和Genshi等几个组件组成,并且基于MVC架构。这对于快速,高效的Web应用程序开发很有用,而且更易于维护。使用此框架,您可以分别使用最小或完整堆栈模式编写小型或复杂的应用程序。
Flask:该框架的理念是提供一个易于管理的,易于定制的解决方案。Flask将自己定义为一个微框架,最常用于主要优先考虑精益功能的小型解决方案。该框架还用于创建原型。
1. 科学库很全。
科学库:numpy,scipy。作图:matplotlib。并行:mpi4py。调试:pdb。
2. 效率高。
如果你能学好numpy(array特性,f2py),那么你代码执行效率不会比fortran,C差太多。但如果你用不好array,那样写出来的程序效率就只能呵呵了。所以入门后,请一定花足够多的时间去了解numpy的array类。
3. 易于调试。
pdb是我见过最好的调试工具,没有之一。直接在程序断点处给你一个截面,这只有文本解释语言才能办到。毫不夸张的说,你用python开发程序只要fortran的1/10时间。
4. 其他。
它丰富而且统一,不像C++的库那么杂(好比linux的各种发行版),python学好numpy就可以做科学计算了。python的第三方库很全,但是不杂。python基于类的语言特性让它比起fortran等更加容易规模化开发。
python和老牌科学计算语言fortran相比,有着众多的优势,如果能用f2py接合两者,那是极好的。
首先,Python是FLOSS(自由/开放源码软件)之一,也就是所说的开源性。
使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
其次,Python本身所拥有的的扩展扩充性。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。但Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块,同时,Python编译器本身也可以被集成到其它需要脚本语言的程序内。另外,Python可将其它语言编写的程序进行集成和封装。
第三、Python让代码具备高度的可读性。
Python设计之初,就尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观,不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。另外,Python语言写的程序不需要编译成二进制代码。
第四、是更高级的Virtual Machine(虚拟机)
Python在执行时,首先将py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这相较于Java或NET的Virtual Machine(虚拟机)来说,Python Virtual Machine(Python虚拟机)距离真实机器的距离更远,即抽象层次更高一些。而基于C的Python编译出的字节码文件则为pyc格式。除此之外,Python还可以以交互模式运行,实现交互操作。
第五、Python支撑大规模的软件开发。
Python开发者不喜欢花俏的语法,一般选择没有或者很少有歧义的语法。因此,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。