400-800-8975

python语言的缺点

python在底层设计上,表现出很强的实用主义倾向。这是比较外交术语的词汇,更加直白的说法应当是,混乱,不知所谓。下面是小编为您整理的关于python语言的缺点,希望对你有所帮助。


python语言的缺点配图

python语言的缺点

目前python被用的还是蛮多的,一些大公司如Google(实现web爬虫和搜索引擎中的很多组件),Yahoo(管理讨论组),NASA,YouTube(视频分享服务大部分由Python编写)等等对Python都很青睐。而国内的豆瓣可以说是给Python予千万宠爱了,它的前台后台清一色的都是Python的身影。另外,我们计算机视觉这块用的很频繁的OpenCV也提供了Python的接口,网上还提供了不少Python的机器学习的库(例如milk,scikit-learn,Pylearn2等),Deep learning的一个知名的Python的库theano,自然语言处理的库NLTK。此外,Python为数学、科学、工程和绘图等提供了有趣的标准库(例如,NumPy ,SciPy和matplotlib等),Python占有的用户群越来越广。但python语言也有如下一些缺点。

很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。(对很多用户而言这也不算是限制)

⑴运行速度,有速度要求的话,用C++改写关键部分吧。不过对于用户而言,机器上运行速度是可以忽略的。因为用户根本感觉不出来这种速度的差异。

⑵既是优点也是缺点,python的开源性是的Python语言不能加密,但是目前国内市场纯粹靠编写软件卖给客户的越来越少,网站和移动应用不需要给客户源代码,所以这个问题就是问题了。国随着时间的推移,很多国内软件公司,尤其是游戏公司,也开始规模使用他。

⑶ 构架选择太多(没有像C#这样的官方.net构架,也没有像ruby由于历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)。不过这也从另一个侧面说明,python比较优秀,吸引的人才多,项目也多。

用Python编程的缺陷有哪些

任何言语都有其欧缺陷,python也不破例,先让咱们看看python的长处:

Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,

初学者学Python,不但入门容易,而且将来深化下去,能够编写那些十分十分复杂的程序。

2. 开发功率十分高,Python有十分强大的第三方库,基本上你想通过计算机完成任何功用,Python官方库里都有

相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大下降开发周期,防止重复造轮子。

3. 高级言语————当你用Python言语编写程序的时分,你无需考虑诸如怎么管理你的程序运用的内存一类的底层细节

4. 可移植性————由于它的开源实质,Python已经被移植在许多平台上(通过改动使它能够工作在不同平台上)。假如你小心肠防止运用依赖于体系的特性,那么你的所有Python程序无需修正就几乎可以在市场上所有的体系平台上运转

5. 可扩展性————假如你需要你的一段要害代码运转得更快或者希望某些算法不揭露,你能够把你的部分程序用C或C++编写,然后在你的Python程序中运用它们。

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

缺陷:

1.代码不能加密

因为PYTHON是解释性言语,它的源码都是以明文方式存放的,不过我不认为这算是一个缺陷,假如你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去完成。

2. 多线程支持不好

3.Python慢

Python相对C言语确实慢许多,但其实这里所指的速度慢在大多数时分咱们是无法感知的,比如说,是用C言语程序开发了一个程序,执行需要花0.01秒,运用Python完成相同功用的程序,需要花0.1秒的时间,虽然相差10倍,但是咱们基本是感知不到的。更多的时分,程序慢是程序员完成功用方式导致的。就好像开罐头的时分,有的人用牙咬,有的人用东西,这样两个人的功率相比起来就差了许多。

我曾经听过一句话,言语自身的快慢距离并不能被咱们领会出来,真正让咱们领会出距离的是用言语的人。

Python语言是不是有设计缺陷

对于问题本身,不知道类型是什么。

治标的方法是用 JetBrains PyCharm,有类型推导(注意要加类型标注)。

治本的方法是改用强类型静态类型的语言。比如我现在沉迷的 Rust 语言。

另外 Python 正考虑引入类型检查(mypy)[Python-ideas] Proposal: Use mypy syntax for function annotations。本身 Python 3 就支持类型注释。


python语言的缺点配图

def func(foo: Foo) -> Bar:

Bar(foo)

中文乱码是你自己不过关,不评论啦。

====

关于 @Vani 的答案(python语言是不是有设计缺陷? - Vani 的回答)

1. len 的解释:[Python-3000] Special methods and interface-based type system

First of all, I chose len(x) over x.len() for HCI reasons (def__len__() came much later). There are two intertwined reasons actually,both HCI:

(a) 对于一些操作符,前缀比后缀更好读 — 前缀 (和中缀) 在数学中有悠久的历史,其中的视觉效果能帮助数学家思考一些问题。我们可以简单的把 x*(a+b) 重写成 x*a + x*b ,同样的事情以 OO 的方式就比较笨拙。

(b)当我读到 len(x) 我知道这是在x的长度,代码告诉我两点:返回值是一个整数,以及参数是某种容器。而当我读到 x.len()的时候,我只知道 x 是某种容器实现了一个借口,或者继承了一个有 len() 方法。我们亲眼目睹了这样的混乱,一个类没有实现映射却有 get()或 keys() 或者一些非文件有 write() 方法。

Saying the same thing in another way, I see ‘len‘ as a built-in operation. I’d hate to lose that.请注意,len 永远是调用 foo.__len__() ,这明显是有意的设计不是无意的坑。不是只有能写出 3.week.ago 的语言才能叫 OO 的。

2. 更正,把 move 看成 remove 了,Python 3 并没有改掉这个。

3. 闭包,同样这是故意做的限制,Python 对函数式编程做了很多限制。仁者见仁智者见智

4. 这对初学者是一个坑。所有教程都会提醒你不要把可变值作为默认值。此处的处理如果有更好的方法欢迎指出。

设计上的缺陷,和设计上的决定不同,前者是设计的时候并没有考虑到导致的缺陷(坑),后者是设计中经过权衡的结果。

命名不统一,对 NaN 的排序问题(http://eggfan.org/2607)等等,是前者,确实该黑。

而 Python 的 len()、没有尾递归优化、闭包的限制、整数相除得浮点数等等都是后者,不可能一种语言的设计让所有人舒爽,我就不爽 Python 的很多地方。

Python 有什么缺点

python的整个系统,我其实有非常多的不满。但是用任何一门语言都是取舍问题,如果有一门语言,库够多,已读,易用,性能高,我毫不犹豫立刻转过去。python的强处在于庞大的库,还有非常好的易读和易用性。但是相比来说,性能一直是个问题。python的实现性能大约和C相差五倍上下。如果是大规模计算问题,大约能差10倍以上。当然,我们可以写C扩展,但是这就不是使用python了。我们也可以说,很多时候我们不需要这么快的速度。这是个事实,但是不改变python性能差的事实。 python不但性能差,还有GIL这个玩意。

以至于我现在对高并发计算都采取多进程的模式。多进程模式的通讯效率肯定比多线程低,而且麻烦。

另外,python在底层设计上,也表现出很强的实用主义倾向。这是比较外交术语的词汇,更加直白的说法应当是,混乱,不知所谓。在闭包设计上采用free variable设计,而不是lisp中的environs设计。区别?你试试看在外层闭包中from lib import *。由于引入不定个数名称,free variable无法处理。类似的问题还有LEGB规则,新手往往要花很长时间研究这个例子究竟是怎么错的: a = 1 def f(): print a a = 2 我勒个去,这种反直观反人类的事情都有,还敢说自己易读。

还有坑爹的元编程,这东西根本是坑爹中的坑爹货。如果你用过多重继承,大概就知道python的整个OO系统看起来根本是大型的仿真,到处都是乱糟糟的。C++怎么解决多重继承的?你最好别用(真心说,这可比python更加坑爹)。java怎么解决多重继承的,只能继承Interface。其实这是变相的变成了Interface-Implement模式。python怎么解决的?MRO!为什麽一个类加个__metaclass__就会改变性质啊,为什麽一个类去生成另一个类的写法是——我基本不记得了,反正web.py里面有用到,需要的话去炒栗子吧。为什麽方法要隐藏居然要改名字加__啊。你到底是在做OO还是在看起来像OO的东西上狂打补丁啊魂淡。

lambda表达式弱智。我和人讨论过,lambda是否是图灵完备的。结论还是完备的,不过需要借助Y combinator。何必呢?由于强调lambda的快速特性,因此将lambda强制在一行以内(没有结束标记),导致python其实是没有匿名函数的。一个callback数组写的难过死。语法糖太多了点,当然,这是纯粹的个人感觉。语法糖是把双刃剑,用的好,可以简化编写和阅读,但是太多,往往容易引入语法混乱和额外的约束。

另外,语言的自构建特性混乱。虽说不是每门语言都强调自构建特性,但是通常而言,都是使用C实现一个内核,由内核实现一些基础操作。再由基础操作实现更复杂的操作。每层的边界都是比较清晰的。谁来告诉我,python中有多少库在移植时是由纯python实现的?库的相互依赖层级是?

12 12 分享:

相关课程

发表评论

登录后才能评论,请登录后发表评论...
提交评论

最新文章