社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Python之禅 • 5 年前 • 242 次点击  


有知友写了篇文章 《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
 
242 次点击