欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python中一些糟糕的语法!你遇到过吗?还知道那些?

程序员文章站 2022-04-27 20:51:06
Python是一门语法优雅,功能强大,开发效率高,应用领域广泛的解释性语言。 其有非常多的优点,但是也并不是完美的,除了大家都知道的执行速度不够快,Python2和Python3的兼容问题,以及GIL锁,在其语法上也有一些特点(是否是缺点见仁见智啦): 1. 使用可变对象作为函数默认值 代码如下: ......

python是一门语法优雅,功能强大,开发效率高,应用领域广泛的解释性语言。

其有非常多的优点,但是也并不是完美的,除了大家都知道的执行速度不够快,python2和python3的兼容问题,以及gil锁,在其语法上也有一些特点(是否是缺点见仁见智啦):


 

1. 使用可变对象作为函数默认值

代码如下:

Python中一些糟糕的语法!你遇到过吗?还知道那些?

 

在python中,字典,集合,列表等等对象不适合作为函数默认值。因为这个默认值在函数创建时就会生成, 每次调用都调用了这个对象的”缓存”。

2. bool是int的子类 我们可以用以下代码来测试:

Python中一些糟糕的语法!你遇到过吗?还知道那些?

 

我们在来看看bool的类型:

Python中一些糟糕的语法!你遇到过吗?还知道那些?

 

3.‘==’ 和 is 的区别 ”is”是判断两个对象是否是同一个对象, “==“是判断两个对象的值,但我们通过以下代码来测试:

Python中一些糟糕的语法!你遇到过吗?还知道那些?

 

上边我们四段代码,我们可以想象出python的内存管理,缓存了-5——256的对象。 最后一段,因为float(‘nan’)的类型就是nan,“==”代表值相同,而nan并不是一个值nan和nan的比较关系只能是nan != nan,就如同我们说,负无穷不可能等于负无穷一样。

4. lambda在闭包中会保存局部变量

代码如下:

Python中一些糟糕的语法!你遇到过吗?还知道那些?

 

原因是当赋值给mylist,lambda表达式就执行了循环,直到 i =4结束,i被保留。

5.列表取值超出索引数

我们可以这样写一段代码:

Python中一些糟糕的语法!你遇到过吗?还知道那些?

 

但如果我们这样写:

Python中一些糟糕的语法!你遇到过吗?还知道那些?

 

6. 缩进的问题见仁见智。

如果考虑“在网络上传播代码片段”这个问题,强制的换行和缩进可能是一个障碍。

换句话说,python代码无法像lua、js那样压缩到一行,在复制粘贴、分享给别人时可能会很麻烦。

你还遇到过哪些?欢迎评论分享!

Python中一些糟糕的语法!你遇到过吗?还知道那些?