python 优缺点

172 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,10月更文诚意加码,激发写作潜力|掘金·日新计划 - 掘金 (juejin.cn)点击查看活动详情

求知讲堂python+人工智能 94天完整版 学完可就业_哔哩哔哩_bilibili

python在2019年排名第4,2020年在第3名,而且呈增长趋势。

python优点

  1. 简单,易学 python是一种代表简单主义思想的语言。阅读一个良好的python程序就感觉 像是在读英语一样,尽管这个英语的要求非常严格!python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身,语法相对简单。

python的设计哲学就是简洁优雅,他代表一种简单主义的思想的一员。它能使我们开发人员专注于解决问题本身专注于业务逻辑的实现,而不是去花时间搞语法层面的内容。上手比较快。

  1. 免费、开源 python开源,开发者可以自由的下载,阅读,甚至是修改python源码。

python在设计之初就确定了开源路线。所谓开源,就是开发者可以自由的去下载阅读python的源代码,甚至可以去提交,修改,为python的发展贡献自己的力量。

  1. 丰富的第三方库: python具有本身丰富而且强大的库,而且由于python的开源特性,第三方库也非常多,例如:在web开发有django,flask,tornado、爬虫scrapy、科学计算numpy,pandas等等。

它没有门槛,开源,所有的爱好者都可以去贡献内容。所以第三方库非常多。

  1. 可以移植: 由于python是开源的,它已经被移植到了大多数平台下面,例如:window、MacOS、Linux/Andorid/iOS等等。

这个是建立在开源之上。一句话概括就是一次编写,到处运行。比如在windows编写python代码,要想运行在Linux或MacOS等其他平台下面。只需要根据不同的操作系统安装不同的解释器就可以实现。

  1. 面对对象: python既支持面向过程,又支持面向对象,这样编程就更加灵活。

python缺点

  1. 运行速度慢: 与C程序相比非常慢,因为Python是解释型语言,代码在执行时会一行一行地翻译成CPU能理解的机器码这个翻译过程非常耗时所以很慢而C程序是运行前直接编译成CPU能执行的机器码所以相对Python而言C语言执行非常快。

c语言是一个编译型语言,python是一个解释型语言。所谓编译型语言对于计算机执行(CPU)来讲,由于CPU也不能直接去识别c语言或python语言,我们需要将我们的语言转换成它能理解的机器语言,也就是二进制代码。对于c语言和python来讲,他们转化翻译的过程不一样,c语言是首先会把它的源代码进行依次的编译(相当于打包加密),编译成cpu能够识别的机器语言,编译完之后我们在运行的时候就一次性的把编译后的结果直接交给cpu处理就行了。cpu在执行c语言的时候是不用关注编译之前的文件,编译完之后对于原来的c语言的环境是无关的。对于python语言来讲,我们并没有编译的过程,但是有解释的过程。python在执行的时候,是将代码逐行的去经过解释器去执行,解释通过才交给cpu,从第一行到最后一行依次往复(每行都这么做)。所以python在解释的过程当中需要花费一些时间,而c语言不需要,它事先经过编译,编译完后全部交给cpu去执行。python的时间是浪费在解释的过程(解释一行执行一行,解释过程也是翻译的过程)。对于今天我们的硬件的速度来讲是可以忽略不计的,因为硬件的速度就特别的高,正常的一个软件的执行结果包括时间对于我们大脑的反应时间是可以接受的,所以不需要关注运行的速度。

2、代码不能加密: 要发布你写的程序,实际上是发布源代码而解释型的语言,则必须把源码发布出去。

3、强制的缩进: Python有非常严格的缩进语法,只要缩进错误程序立马崩溃。

4、GIL全局解释器锁 在任意时刻,只有一个线程在解释器中运行。对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。遇到i/o阻塞的时候会释放掉(GIL)所以Python的多线程并不是真正的多线程,而是CPU执行速度非常快,让人感觉不到GIL的存在。(GIL)会在Python高级阶段讲解。

这个属于python设计理念的问题,也就是我们在python当中开启的一个多线程并不是一个真正意义上的多线程,它是有一个锁来保证我们正确执行多个线程,也就是只有一个线程在解释器中去执行。那么对于python虚拟机的访问是由全局解释器锁来控制的,也就是我们可以开多线程(1234个甚至n个线程),实际上真正在执行多个任务的时候还是需要经过python解释器,由解释器来保证代码的执行。在同一时刻,到线程的边界区它还是要处理某一个任务。