您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

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

时间:2021-07-04 09:30:09  来源:  作者:AI聘北美求职

引言

 

Python/ target=_blank class=infotextkey>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语句。最常见的情况是对一个文件进行操作。退出上下文时,上下文管理器会自动为我们关闭文件。


Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  Tags: Python  点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  Tags: Python  点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  Tags: Python  点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  Tags: Python  点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  Tags: Python  点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  Tags: Python  点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  Tags: Python  点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  Tags: Python  点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  Tags: Python  点击:(28)  评论:(0)  加入收藏
假设某日我开了一家空调公司,暂且就叫他天强空调安装设备公司吧,假装自己有公司,接了一单大生意,就是给甘肃省的各个高校安装空调(其实这边的气候基本用不到空调,就是假想一下),那么...【详细内容】
2022-07-01  Tags: Python  点击:(33)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条