Python社区  »  Python

说 Python 是最糟糕的语言,其实没说到点子上

Python之禅 • 2 月前 • 51 次点击  


有知友写了篇文章 《Python 是我用过最糟糕的语言之一》,说了一堆Python的缺点,但没一条说到点子上,引号里面是作者的观点,后面是我对他所说的做的解释。

没有Let等局部变量声明(Scala有block,Haskell,Idris,Ocaml,es6的Let, js的 var),你无法可靠地在局部引入一个变量,一不小心就把全局变量改了。我觉得这个是最无法忍受的。

说没有局部变量声明,不知道他是怎么使用使变量的,也许他并不知道LEGB,只要没有用 global 关键字声明的话,默认定义在函数里面的变量都是局部变量,例如:

x = 10
def func():
x = 20

函数里面的x和外面的x完全互不影响,怎么就把全局变量改了呢?

所有绑定都是可变变量,没有immutable

immutable对象在Python多了去了,int、float、decimal、complexbool、string、tuple、range、frozenset、bytes 都是不可变对象

匿名函数不支持多行,这个还不如js

Python 是采用强制缩进的语言,匿名函数换成多行反而变得复杂了,Python哲学就不鼓励复杂的逻辑用匿名函数来实现,可读性不好,限制单行是要求你尽可能是在简短的逻辑才使用匿名函数,如果是复杂的业务逻辑,你完全你可以用嵌套函数嘛。

动态类型系统,编辑器支持非常糟糕,难以代码补全(pycharm)

这个就更没有黑的必要可,动态类型语言的特性用起来就是比静态语言灵活方便,表达性比静态语言更强,所以你很少会看到有Python相关的设计模式。 我感觉PyCharm的代码补全功能已经非常完善了,自从Python引入了类型声明后,编辑器支持已经足够友好了。

版本兼容问题:2和3不兼容是OK的,但是居然3.6和3.7的包都不互通(比如3.7就没法安装Tensorflow)

因为Python3.7新增了async关键字,如果你的项目中不幸使用了async作为变量名,肯定运行不了,这换成任何语言都是这样,jdk10 也引入过新的关键字 var, 如果你的代码把var作为变量,一样也运行不了,这没啥好黑的,总体上语法、接口都是保持向后兼容的。

以上其实都是一些个人喜好的问题,谈不上糟糕两字,就好比湖南人吃米粉有些人喜欢吃圆的,有些人喜欢吃扁的一样,你不能因为这家店只提供扁粉你就说他们的体验很糟糕吧。


推荐阅读:

那啥。。。很久没有搞赠书活动了

学编程最好的开始方式是不管3721,就是干

如果喜欢本文,欢迎关注并置顶公众号
方便第一时间收看最新内容

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29817
 
51 次点击  
分享到微博