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

By 刘志军, 2019-03-15, 分类: Python

python

有知友写了篇文章 《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作为变量,一样也运行不了,这没啥好黑的,总体上语法、接口都是保持向后兼容的。

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


有问题可以扫描二维码和我交流

关注公众号「Python之禅」,回复「1024」免费获取Python资源

python之禅

猜你喜欢

2017-10-22
图解Python变量与赋值
2019-02-22
Python趣味挑战
2017-10-29
Python每日一题:第1题
2017-09-01
关于操作 Python 列表最常见的10个问答
2017-03-15
Python 函数中,参数是传值,还是传引用?
2019-05-07
Python如何提取url中的参数
2019-11-21
自己动手写个"狗屁不通"文章生成器
2016-02-27
免费中文Python电子书(教程)
2015-11-25
OS X El-Capitan 安装 virtualenvwrapper 遇到 Operation not permitted
2019-05-12
Python 字符串转日期时间