python的优缺点是什么?

Python013

python的优缺点是什么?,第1张

优点:

Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能

缺点:

速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。

代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。

线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。

Python目前主要应用领域:

云计算: 云计算最火的语言, 典型应用OpenStack

WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django

科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas

系统运维: 运维人员必备语言

金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测

图形GUI: PyQT, WxPython,TkInter

Python在一些公司的应用:

谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发

CIA: 美国中情局网站就是用Python开发的

NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算

YouTube:世界上最大的视频网站YouTube就是用Python开发的

Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载

Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发

Facebook:大量的基础库均通过Python实现的

Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的

豆瓣: 公司几乎所有的业务均是通过Python开发的

知乎: 国内最大的问答社区,通过Python开发(国外Quora)

春雨医生:国内知名的在线医疗网站是用Python开发的

除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务。

python发展史

1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。

1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。

Granddaddy of Python web frameworks, Zope 1 was released in 1999

Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.

Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础

Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生

Python 2.5 - September 19, 2006

Python 2.6 - October 1, 2008

Python 2.7 - July 3, 2010

In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible

Python 3.0 - December 3, 2008

Python 3.1 - June 27, 2009

Python 3.2 - February 20, 2011

Python 3.3 - September 29, 2012

Python 3.4 - March 16, 2014

Python 3.5 - September 13, 2015

Python 3.6 - December 16,2016

摘自我的博客,禁止所有形式的转载

1、Scrapy:是一个为了抓取网站数据,提取数据结构性数据而编写的应用框架,可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中,用这个框架可以轻松爬下来各种信息数据。

2、Pyspider:是一个用Python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行抓取结构的存储,还能定时设置任务与任务优先级等。

3、Crawley:可以高速抓取对应网站内容,支持关系和非关系数据库,数据可以导出为json、xml等。

4、Portia:是一个开源可视化爬虫工具,可以让您在不需要任何编程知识的情况下抓取网站,简单地注解您感兴趣的页面,创建一个蜘蛛来从类似的页面抓取数据。

5、Newspaper:可以用来提取新闻、文章和内容分析,使用多线程,支持10多种编程语言。

6、Beautiful Soup:是一个可以从HTML或者xml文件中提取数据的Python库,它能通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式同时帮你节省数小时甚至数天的工作时间。

7、Grab:是一个用于创建web刮板的Python框架,借助Grab,您可以创建各种复杂的网页抓取工具,从简单的五行脚本到处理数万个网页的复杂异步网站抓取工具。Grab提供一个api用于执行网络请求和处理接收到的内容。

8、Cola:是一个分布式的爬虫框架,对于用户来说,只需要编写几个特定的函数,而无需关注分布式运行的细节,任务会自动分配到多台机器上,整个过程对用户是透明的。

Node.js相优于Python的地方:

快:这个快有两方面,第一是V8引擎快,第二是异步执行,Node.js

功能上是一个基于V8引擎的异步网络和IO Library,和Python的Twisted很像,不同的是Node.js的event

loop是很底层的深入在语言中的,可以想象成整个文件在执行的时候就在一个很大的event loop里;

npm:npm可以说是用起来最顺手的package management了,npm作为Node.js的官方package management,汇集了整个社区最集中的资源;不像Python经历过easy_install和pip,还有2to3的问题;

Windows支持:Node.js有微软的加持,Windows基本被视为一等公民来支持,libuv已经可以很好的做到统一跨平台的API;而Python虽然也对Windows有官方的支持,但是总感觉是二等公民,时不时出些问题。

Python优于Node.js的地方:

言:就单纯从语言的角度来说,Python写起来要比Javascript舒服很多;Javascript

设计本身有许多缺陷,毕竟当时设计的时候只是作为在浏览器中做一些简单任务的script,所以代码一旦庞大,维护还是有困难(不过Node.js的

module很大的改善了这个问题),不过用Coffeescript可以很大的改善Javascript,几乎可以和Python等同;

熟:成熟包括语言本身已经成熟,还有Framework和ecosystem也很庞大。Node.js的绝大多数framework都很新,有的API一

直在变,有的感觉已经不在维护,总之没有一个像Django那种百足之虫感觉的framework。Python的主流ORM

SQLalchemy也很成熟。

Python 和 Node.js 很难分高下的地方:

步Style:Node.js的异步Style是CPS,也就是层层callback,基于event,和浏览器中的Javascript很像。CPS好

处是让熟悉浏览器Javascript的人能很快上手,学习难度也不大。缺点是逻辑一复杂,就变得很难维护,基本上需要通过async.js这种

library,或者用promise。Python的异步除了和Node.js很像的Twisted之外,也有基于coroutine的

gevent,coroutine让异步代码维护起来更容易,不过学习曲线陡;

应用场景:如果是一个CRUD的app,

那么想都不想直接是Python,Node.js本身不擅长CRUD的app(绝大多数Node.js都是直接裸在外面的,而不是有一个Nginx在前

面,否则websocket就不能用了,不过新版nginx开始支持websocket),代码又不好维护,而Python的WSGI很适合,成熟的

stack也有很多。如果更偏向于real-time,比如一个chat room,那么Node.js实现更容易。这两个应用场景还是有差别的。

来源于知乎:https://www.zhihu.com/question/20961574