Python:经过了十几年,你们还没有消除的对我的误解吗?

简介:

摘要:

大学毕业到现在用的最多的编程语言还是C,C++,后来学习了一下Python,觉得Python是门学了不后悔的语言。尤其适合非程序员学习,作为青少年学习计算机的首门语言也不错,大学生学习计算机采用Python语言作为入门也不错。一个软件工程师,感觉以C+Python+HTML5+JavaScript的搭配也可以接受。对于Python语言一直存在一些误解,整理了一下网上资料,仅仅当作自己学习的乐趣,也算是给自己鼓鼓劲。

注:

这里不想讨论编程语言的优略,因为程序员都是认真的,一讨论编程语言一定会热闹起来,比如以前Linux作者林纳斯·托瓦兹的C与C++好坏争论,...... ,PHP是世界上最好的语言等等。

练武功既要练招式,也要练内功,讨论编程语言别太认真,选合适的解决自己问题的语言就好。

图:Linux之父Linus Benedict Torvalds

Python是一门新的语言:

Python语言在国内大规模流行主要是从2014年左右开始,这一点从某娘的搜索指数也可以看出。

图:几种编程语言的搜索指数趋势

由图可见,2014年前,Python在国内搜索指数很低,2014年之后逐渐增加,到2017年竟然超过了老大Java。但不要认为Python新近流行,就认为Python是新语言,其实了解Python历史的人一定知道,Python诞生于1989年,1991年发布第一个版本,其年龄比Java还大4岁。Python一个著名的早期使用的例子是1996年Google的第一个成功的网络爬虫。和Java比Python更像草根,一直默默修炼,最终大器晚成。这么多人喜好说明Python还是有它自身的优点的。

Python是解释型语言,没有被编译:

Python的确不像C、C++那样需要编译成可执行程序,但它更像Java,会将源代码编译成自己的字节码。字节码有解释器(Java称虚拟机)来处理执行。Python和Java比完全开源,没有被某个大机构掌控,解释器也比较多,如:CPython, PyPy, Jython/JVM, IronPython/CLR等等。

Python是脚本语言,不是一门独立的开发语言:

Python确实是一种面向对象的脚本语言,而且还是这个领域的先行者之一。因其语法简单,支持跨平台,并且普遍存在于Linux,Macs和其它Unix机器中。尤其是在自动化运维方面,Python语言绝对是首选。目前自动化测试也开始更多的选择Python语言。

但是不能因为其这方面强大,就忽视了Python最为一门独立编程语言的特性,事实上,Python可能是通用编程语言中最灵活、功能最强大的开发语言之一。下面给出一些实例:

1.电话基础设施(Twilio)

2.支付系统(PayPal,Balanced Payments)

3.神经科学和心理学(例子很多)

4.数值分析和工程学(numpy, numba和很多其它例子)

5.动画片(LucasArts, Disney, Dreamworks)

6.游戏后端(Eve Online, Second Life, Battlefield和很多其它例子)

7.电子邮件基础设施(Mailman, Mailgun)

8.媒体存储和处理(YouTube, Instagram, Dropbox)

9.运营和系统管理(Rackspace, OpenStack)

10.自然语言处理(NLTK)

11.机器学习和计算机视觉(scikit-learn, Orange, SimpleCV)

12.安全和渗透测试(DNSRecon、patator、XSSer、太多了,包括eBay/Paypal/)

13.大数据(Disco, Hadoop support)

14.日历(Calendar Server, which powers Apple iCal)

15.搜索系统(ITA, Ultraseek, and Google)

16.互联网基础设施(DNS) (BIND 10)

17.云计算平台(OpenStack)

18.爬虫框架(Scrapy,scrapy-redis)

19.WEB架构(Django、Flask、Tornado)

20.调试和逆向工程(很多这里不列举了)

其他例子举不胜举,可以通过互联网搜索。 当下,以Python作为主开发语言是没有任何问题的,可以作为初入行者的首门语言。

Python是弱类型语言:

Python一个明显的特性是变量是动态类型的,这不影响Python作为一种强类型语言。从某种意义上讲,Python具有比Java更强的类型系统。Java的原语和对象有各自的类型系统,Null存在于一种灰色地带。

另一方面,Python有一个统一的强类型系统,None这种类型也有明确的定义。

关于Python的类型系统,在应用中也需要注意,认真处理,否则也会带来麻烦。

Python不安全:

Python是解释型语言,通常软件发布采用源码方式,所以认为代码保密性不好,安全性不好。前面我说了,Python是支持编译的,其实Python可以是编译+解释混合型。

另外安全不能依靠编译状态的代码,更重要的是使运行环境更安全。因为本质上,每种语言都有反汇编器或可以被破解,这会破坏程序的保护状态,所以安全不能仅仅靠编译。

安全的一个核心原则是尽可能小的呈现目标。CPython通过简单的、稳定的和易于审计的虚拟机来解决这些问题。事实上,在Coverity软件最近的一个分析中,CPython得到了最高的质量评价。

Python还具有一系列广泛开源的、行业标准的安全库。将hashlib,PyCrypto和OpenSSL结合在一起,通过PyOpenSSL,进行一些处理是可以满足各种安全和性能需求的。

根据公开资料,PayPal(eBay)的应用安全组中使用Python的安全应用的例子也不少:

1.为促进密钥置换和加强加密的实现创建安全代理

2.集成行业领先的HSM技术

3.为不兼容的栈构建基于传输层安全的包装器代理

4.为我们内部双向认证机制产生密钥和证书

5.开发主动的漏洞扫描器

国内的BATJ公司也大量使用Python进行开发,此外,很多由Python构建的以运营为导向的系统都暗含安全特性,例如防火墙和连接管理等。

Python缺乏好的并发性支持:

提到Python,一定会提到Python的GIL(全局解释器锁),也一定会质疑“Python缺乏并发性”。这个确实不好说。只能简单来看吧。

Python有大量的并发性原语,包括generators,greenlets,Deferreds和futures。Python有非常多的并发性框架,包括eventlet,gevent,pulsar,toro,offset和Twisted。

目前已有大量的工作投入到了为并发性定制运行时间,包括Stackless和PyPy。所有这些,以及更多的案例表明有效地使用Python可以进行并发编程。这些企业级的产品都得到了官方支持和使用。

全局解释器锁GIL是在Python大多数使用情况下的性能优化,也是CPython 代码在开发中的易用性优化。GIL可以让操作系统的线程或绿色线程使用起来更容易,同时不影响多进程的使用。

目前大量服务器端软件采用Python开发,我们也看到Python服务器每天每台机器有数百万次的请求,但它们都可以轻松的处理。所以不能说Python缺乏并发行支持。

Python不适合做大项目:

Python主要特点之一是开发效率极高,Python项目组能以少量开发人员完成较大项目。Instagram达到每天亿万次的点击和数10亿美元,整个公司仍然只有一组数十人的团队。Dropbox在2011年仅有70名工程师,其它Python团队的情况也很类似,人员不多。同时也带来一个质疑,Python做不了大项目,组建不了打团队。Instagram,Dropbox算小项目吗?

我们看几个例子,美国银行实际上有超过5000名Python的开发人员,一个单独的Python项目有超过千万行Python代码。摩根大通经历了相似的转变。YouTube也有数千名工程师和数百万行代码。大的产品和大的团队每天都使用Python,它们具有卓越的模块化和封装特性,超过某一特定点后,通用开发规模基本保持不变。工具、强的约定和代码评审使大的项目易于管理。

编写大项目任何语言都会碰到问题,不能光靠语言约束。应该遵守合理、严格的规范,养成良好的编程素养。如:可以支持PEP8规范,在提交代码前,我们使用PyFlakes和其它工具去执行Python代码的静态分析等等。

事实上Python不仅开发效率高,更容易开发出高效,稳定的软件。

Python不能扩展:

这个有点没模糊,Python语言本身是可扩展的,Python也可以开发出就有扩展性的软件。YouTube采用Python开发,是一个可扩展的网站。每月都有超过10亿的独立访客,每分钟上传超过100小时的视频,占用20%的互联网络峰值带宽,这些都用Python作为核心技术。Dropbox、Disqus、Eventbrite、RedTwilio、Instagram、Yelp、EVEOnline、Second Life、eBay、以及PayPal,这些案例证明Python的扩展性还不赖。

简单性和一致性是成功的关键。CPython这个基本的Python虚拟机,使这些特征最大化,同时也使运行时间可以预测。很难看到Python程序员关注垃圾收集中止或应用程序启动时间。随着强大的平台和网络支持,Python自然地适应了智能的横向可伸缩性,主要表现在像BitTorrent这样的系统中。

另外两个问题:

这两个不能算是误解,可以说是事实。

1、Python运行速度慢

Python作为解释型语言,通常理解是没有C、C++这些编译型语言快。不过说Python语言比Java慢,这个有待商榷。可以从以下几个方面看这个问题,语言仅仅是一个因素,单独评估一个语言的快和慢,有时并不恰当。应该对一个应用程序,最好是针对一个特定的用例进行评估。比如用Java,Python同样实现一个软件进行评估。由于Python可以和C、C++很好的互相调用,对于真正需要性能的地方可以使用C、C++进行扩展,然后需要提高编码效率的地方用Python实现,这样写出的整体软件可能比Java还快。还有现在出现了一些优化的Python解释器,如:PyPy的JIT编译器达到了比C语言更快的性能。还有Python应用在服务器端居多,和运行速度比网络吞吐量也是瓶颈,从现有软件看,Python的运行速度不是最大问题,Disqus的用户规模从2.5亿增长到5亿,一直都是使用同样的100台服务器。提高软件的迭代速度也是要考虑的因素。Python从设计之初就把开发者的开发效率放第一位。根据经验,同样的时间内,Python项目比C++或Java项目会有更多迭代次数。

2、Python程序员稀缺

Python流行相对较晚,而且之前Python通常作为一个工程师的第二语言,Python开发工程师数量少是事实。

Python的网页开发工程师不如PHP和Java那么多。这可能是由于行业需求和教育的联动导致的,但教育趋势表明这很有可能会被改变。

Python开发的高效率,使得采用Python开发,一个较小的团队可以完成一个高效,强大的软件的开发工程。这也是一个因素。

从另外一个角度看,Python从业人员少也是相对的,Python从业人员的绝对数量也不少。全世界有数以百万计的Python开发人员,几十个Python会议,StackOveflow上几万个Python相关的问题,一些公司,如YouTube,美国银行,和LucasArts/Dreamworks雇用了成千上万的Python开发人员。

一个新建项目或者初创公司更喜好选择Python,原因如下:

Python非常容易学习,而且对孩子,大学生和在职人员来说也是首选编程语言。对一个新Python程序员来说,只需要一周时间,他就能够初见成效,往往在2到3个月就可以大放异彩,互联网上丰富的互动式教程,书籍,文档和开源的代码库,使这一些变得可能。

近年Python开发工程师岗位数量激增。从业人员薪水还算不错,所以一定会有大量的初学者入场,平均薪资被拉低也是必然。从业有风险,入行需谨慎。

图:Bruce Eckel原话是"Life is short, you need Python"


目录
相关文章
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
116 80
|
2月前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
163 59
|
25天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
41 14
|
1月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
84 2
|
1月前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
59 10
|
1月前
|
机器学习/深度学习 人工智能 Java
Python 语言:强大、灵活与高效的编程之选
本文全面介绍了 Python 编程语言,涵盖其历史、特点、应用领域及核心概念。从 1989 年由 Guido van Rossum 创立至今,Python 凭借简洁的语法和强大的功能,成为数据科学、AI、Web 开发等领域的首选语言。文章还详细探讨了 Python 的语法基础、数据结构、面向对象编程等内容,旨在帮助读者深入了解并有效利用 Python 进行编程。
|
1月前
|
机器学习/深度学习 人工智能 数据挖掘
探索Python编程的奥秘
在数字世界的海洋中,Python如同一艘灵活的帆船,引领着无数探险者穿梭于数据的波涛之中。本文将带你领略Python编程的魅力,从基础语法到实际应用,一步步揭开Python的神秘面纱。
49 12
|
1月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!

热门文章

最新文章