<返回更多

初学者最容易翻车的三大Python功能

2021-07-04    AI聘北美求职
加入收藏

引言

 

Python已成为许多编程初学者的必备语言。

 

因为Python在机器学习、数据处理和其他领域的广泛能力,

 

许多不同语言背景的人可能都会考虑改用Python。

 

Python的设计其实非常简单。

 

但在某些情况下,可能会让初学者感到困惑。

 

所以本文我想澄清一些令人困惑的Python特性。

 

初学者最容易翻车的三大Python功能

图源:Juan Pablo Donadías

 

 

 

​​逻辑运算符:and, or

 

 

 

当我们构造if…else…语句时,通常需要给定一个求值的条件。

 

当条件返回为True时,执行if函数。

 

如果为False,则执行else函数。

 

如果某个条件是由多个部分组成的,就需要我们用逻辑运算符and和or进行连接。

 

在这里,每个部分都同时为True的时候,and才能成立;

 

但当任一条件为True时,or就能成立。

 

 

有些人会把它们作为三元表达式使用,

 

这种情况下,我们可以直接评判这些组合条件。

 

具体参考以下示例:

 

初学者最容易翻车的三大Python功能

 


以上这两个例子表明,这种方式会返回第一个非错误值(non-falsy object)

 

那么,下面这个代码又会返回什么结果呢?

 

初学者最容易翻车的三大Python功能

 

 

如果运行这些代码,你会发现,what在这里返回的是空列表(empty list)

 

我们把这个结果的原因留到以后讨论。

 

接下来,观察下面这个使用and逻辑运算符的示例:

 

初学者最容易翻车的三大Python功能

 

 

仔细察看这些例子,看看你是否知道得出这些结果的原因。

 

在Python中,这些组合条件遵循的是短路原则(short circuit rule)

 

意思是,在用and运算符时,系统会查找第一个错误值(falsy value)

 

如果找到,就会停止运算并返回falsy值,比如上面代码中的text1。

 

如果找不到,就会返回最后一项,比如上面的number1和text2。

 

or运算则会寻找第一个真值(truthy value)

 

如果找到就会停止运算,并返回真值(truth value),比如上面的number和text变量。

 

但如果找不到任何内容,它会返回最后一项,如what变量所示

 

 

 

​​ 赋值表达式

 

 

 

在Python和许多其他编程语言中,表达式(expressions)语句(statements)是两种截然不同的概念。

 

通常,表达式代表的是一个Python对象的计算结果。

 

我们可以在内置的eval方法中使用表达式,来生成求值。

 

相反,语句执行的是一个动作,而不是计算,语句是不能用来求值的。

 

语句的其中一种特殊形式是赋值(assignment)

 

具体来讲,就是当我们给一个变量赋值时,它就变成了一个赋值语句,这个过程是一个动作。

 

我们在创建一个新变量,但不是进行求值。

 

下图是一个例子:

 

初学者最容易翻车的三大Python功能

无法评估语句

 

Python从版本3.8开始引入了新功能,它允许特定的赋值语句具有表达式的特征。

 

也就是说,我们赋值给一个变量(assignment)的同时,也能得到一个值(expression)

 

该功能需要使用一个新操作符 “:=”,有些人把它称为海象(walrus)运算符。

 

请看下面的示例:

 

初学者最容易翻车的三大Python功能

 

 

请注意,这个例子是没有实际意义的,因为语法原因,我们在顶层使用赋值表达式时,必须用到括号。

 

接下来,我们会再看一个不需要括号的更实际的例子。

 

假设我们有一个数字的列表,想要计算出它们的累计求和(cumulative sum)并保存到列表中。

 

我们可以利用itertools模块中的accumulate函数运行,具体操作如下:

 

初学者最容易翻车的三大Python功能

使用accumulate计算累计求和

 

当然,还有另一种利用赋值表达式的解决方案。

 

具体如下:

 

初学者最容易翻车的三大Python功能

 

 

在列表的推导式中,我们要把表达式放在for关键字之前。

 

虽然赋值语句(Assignment)不能出现在那,但赋值表达式(assignment expression)是可以的。

 

重要的是,这个表达式能够更新total这个变量,我们还可以用它来获取累计求和。

 

 

 

​ 上下文管理:with

 

 

 

在研究别人的代码时,你可能会碰到这样的用法。

 

就是用with语句打开文件,对文件本身执行必要的操作。

 

初学者最容易翻车的三大Python功能

 

 

有可能你在其他文本相关的操作也会用到这个方法,但你有思考过为什么要这样操作吗?

 

毕竟,它会产生额外的缩进,多少会分散注意力。

 

这一功能背后的主要概念被称为上下文管理(Context Management)

 

意思是,这个语句会创建一个上下文,你可以在其中访问管理资源。

 

在这个例子里,我们指的就是文本。

 

在没有上下文管理的情况下,我们应该对此文件执行以下操作:

 

初学者最容易翻车的三大Python功能

文件操作

 

你可以看到,使用文件时,我们要打开和关闭它。

 

关闭文件这个动作很关键,因为如果文件在其他地方使用,

 

不关闭文件的话,更新的内容很可能就不会保存到文件中。

 

with语句的目的就是为我们处理这种情况的代码。

 

具体来说,就是退出with语句后,文件会被自动关闭。

 

如下所示:

 

初学者最容易翻车的三大Python功能

 

 

 

 

​总结

 

 

 

本文中,我们回顾了Python中让初学者困惑的三个特性,希望我解释清楚了。

 

下面,让我们快速回顾一下:

 

  • 1、当我们使用组合条件时,Python会进行短路计算。使用and操作时,它将返回第一个虚值或最后一项。使用or操作时,它会返回第一个真值或最后一项。

 

  • 2、表达式(expressions)语句(statements)不同。赋值语句(assignment statement)不会产生任何值。但是,赋值表达式(嗄ssignment expression)在分配变量的同时还能求值。

 

  • 3、当需要管理特定上下文时,我们可以使用with语句。最常见的情况是对一个文件进行操作。退出上下文时,上下文管理器会自动为我们关闭文件。
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>