关于python优缺点的思考

    由于工作原因,目前我接触最多的,理解最深的语言是python,虽然接触的时间没有C,Pascal来得长,但是由于工作的需要,对这个语言进行了一些探索,现在想谈谈我有关与python的看法,当然,我接触过的语言并不多,而且都没有怎么深入地接触,所以部分见解可能会有一定的偏差,还望读者纠正或补充。

    python的优点主要集中在以下几个方面,这也是这些年python逐渐从茫茫多的语言市场中脱颖而出的原因:

    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没有抽象类,没有其他语言里那些privity,public,protect这些设定,就连python定义内置方法的__前缀也很少看到在项目代码中使用,前辈告诉我,python这样做是为了自由,而项目组不用__是一种约定

    后一条是为了项目组内的统一,暂时不讨论,毕竟最好的规范就是统一的规范

    那么python之所以没有私有,公有,抽象这些东西,完全是出于一种自由的设计思想,事实上在python中实现私有,公有,抽象这些东西并不是做不到的,只需要自己封装一些东西就行了,比如抽象类,只需要让所有默认接口raise异常即可,这个类就从意义上成为了抽象类,同理,私有,公有也可以自己去实现,python没有在底层默认写好,就是出于一种自由的设计思想,虽然抽象类的适用范围很广,但是谁也不能打包票说任何地方都是有抽象类比没有抽象类更好,于是python就将有没有抽象类的选择留给了使用者。

    当然,这只是python内在的一个细节,实际上python的可扩展性不仅仅在对内的设计思想上,它对外也是如此,这里的对外即不同语言之间的配合使用,用我身边的例子来说,游戏的服务端可以用C作为底层游戏引擎,python作为逻辑脚本,就像是调用自己亲儿子一样调用C编写的引擎接口,除了跳转不进去之外(可以用文档填补),其他浑然天成,仿佛C语言的底层不存在一样。

说完了优点,自然要讲一讲缺点了,python的缺点自然很明显:

    1.效率

    动态语言的硬伤自然就是慢,比Java还慢,和C相比差距大概在五倍左右,大规模计算差距超过10倍

    这也是python最大的一个问题,有得必有失,python的效率问题也不是技术原因导致的,而且python也对这方面有所弥补,那就是对效率敏感的地方可以用C重写,以达到预期的效率需求,但是治标不治本,追求python的高开发效率的同时,就得舍弃一些性能上的追求。

    2.GIL

    这是属于python的一个历史遗留问题,当然我所接触的游戏服务端设计刻意避开了多线程的问题,在代码中尽量避开了这一个尴尬的部分(当然据大佬说,多线程容易出错,不好管理),虽然有世界服这种多进程的服务器设计思路,但是大部分维持数据同步的手段都是在脚本里写的,而不是python语言自身实现的

    有关与GIL相关的讨论,可以参考这里:

    点击打开链接

    当然,目前我对python的理解或许还不足以支撑起一篇深度探讨python的文章,不过我会持续更新这篇文章,将自己的理解和想法放进来,也希望大家能够在评论中分享自己对python的看法,互相提高

猜你喜欢

转载自blog.csdn.net/weixin_39633215/article/details/80269443