说 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之禅

猜你喜欢

2024-03-04
Python中的 if __name__ == '__main__' 是什么?
2024-03-04
用 Python 破解隔壁老王家的 Wi-Fi 密码,刺激!
2023-06-12
Python3.12新特性
2023-04-17
Python虚拟环境使用
2023-04-15
如何删除macOS系统默认的Python2.7并替换成最新版python3.11
2022-12-09
python 中return和yield有什么区别
2022-08-17
如何利用多态干掉 if else 语句
2022-07-22
10个python初学者常犯的错误
2022-06-10
flask-siwadoc 支持openapi 分组功能
2022-06-10
在Python应用中Telegram 机器人搭建消息提醒