首页 总结 一消易混淆总结(热门4篇)

一消易混淆总结(热门4篇)

 2024-02-04 12:32:04    admin  

一消易混淆总结 第1篇

循环是任何语言的一个必备要素。同样地,for循环就是Python的一个重要组成部分。然而还有一些东西是初学者并不知道的。我们将一个个讨论一下。我们先从已经知道的开始。我们知道可以像这样使用for循环:

具体执行结果如下:

这是一个for循环非常基础的结构。现在我们继续看看,Python的for循环的一些鲜为人所知的特性。for循环还有一个else从句,我们大多数人并不熟悉。这个else从句会在循环正常结束时执行。这意味着,循环没有遇到任何break. 一旦你掌握了何时何地使用它,它真的会非常有用。我自己对它真是相见恨晚。有个常见的构造是跑一个循环,并查找一个元素。如果这个元素被找到了,我们使用break来中断这个循环。有两个场景会让循环停下来。

考虑下这个简单的案例,它是我从官方文档里拿来的:

具体执行结果如下:

它会找出2到10之间的数字的因子。现在是趣味环节了。我们可以加上一个附加的else语句块,来抓住质数,并且告诉我们:

具体执行结果如下:

一消易混淆总结 第2篇

Python中的协程和生成器很相似但又稍有不同。主要区别在于:

这样做不仅快而且不会给内存带来压力,因为我们所需要的值都是动态生成的而不是将他们存储在一个列表中。更概括的说如果现在我们在上面的例子中使用yield便可获得了一个协程。协程会消费掉发送给它的值。Python实现的grep就是个很好的例子:

具体执行结果如下:

发送的值会被yield接收。我们为什么要运行next()方法呢?这样做正是为了启动一个协程。就像协程中包含的生成器并不是立刻执行,而是通过next()方法来响应send()方法。因此,你必须通过next()方法来执行yield表达式。我们可以通过调用close()方法来关闭一个协程。像这样:

具体执行结果如下:

一消易混淆总结 第3篇

上下文管理器允许你在有需要的时候,精确地分配和释放资源。使用上下文管理器最广泛的案例就是with语句了。想象下你有两个需要结对执行的相关操作,然后还要在它们中间放置一段代码。上下文管理器就是专门让你做这种事情的。举个例子:

上面这段代码打开了一个文件,往里面写入了一些数据,然后关闭该文件。如果在往文件写数据时发生异常,它也会尝试去关闭文件。上面那段代码与这一段是等价的:

当与第一个例子对比时,我们可以看到,通过使用with,许多样板代码(boilerplate code) 被消掉了。 这就是with语句的主要优势,它确保我们的文件会被关闭,而不用关注嵌套代码如何退出。 上下文管理器的一个常见用例,是资源的加锁和解锁,以及关闭已打开的文件(就像我已经展示给你看的)。让我们看看如何来实现我们自己的上下文管理器。这会让我们更完全地理解在这些场景背后都发生着什么。

一个上下文管理器的类,最起码要定义__enter____exit__方法。让我们来构造我们自己的开启文件的上下文管理器,并学习下基础知识。

具体执行结果如下:

我们的__exit__函数接受三个参数。这些参数对于每个上下文管理器类中的__exit__方法都是必须的。我们来谈谈在底层都发生了什么。

我们还没有谈到__exit__方法的这三个参数:type, valuetraceback。在第4步和第6步之间,如果发生异常,Python会将异常的type,valuetraceback传递给__exit__方法。它让__exit__方法来决定如何关闭文件以及是否需要其他步骤。在我们的案例中,我们并没有注意它们。那如果我们的文件对象抛出一个异常呢?万一我们尝试访问文件对象的一个不支持的方法。 我们来列一下,当异常发生时,with语句会采取哪些步骤。

在我们的案例中,__exit__方法返回的是None(如果没有return语句那么方法会返回None)。因此,with语句抛出了那个异常。

我们尝试下在__exit__方法中处理异常:

具体执行结果如下:

我们的__exit__方法返回了True,因此没有异常会被with语句抛出。这还不是实现上下文管理器的唯一方式。还有一种方式,我们会在下一节中一起看看。

我们还可以用装饰器(decorators)和生成器(generators)来实现上下文管理器。Python有个contextlib模块专门用于这个目的。我们可以使用一个生成器函数来实现一个上下文管理器,而不是使用一个类。让我们看看一个基本的,没用的例子:

具体执行结果如下:

这个实现方式看起来更加直观和简单。然而,这个方法需要关于生成器、yield和装饰器的一些知识。在这个例子中我们还没有捕捉可能产生的任何异常。它的工作方式和之前的方法大致相同。

本文给大家介绍了Python中的lambda表达式、FOR-ELSE语句,另外又介绍了协程、函数缓存;最后介绍了上下文管理器。至此,Python中的易混淆的知识点已经介绍完毕。这些都是Python初学者常遇到的问题,当大家遇到问题的时候,可以来看看这些文章,涵盖了大多数初学者遇到的问题。Python是一门注重实际操作的语言,它是众多编程语言中最简单,也是最好入门的。当你把这门语言学会了,再去学习java、go以及C语言就比较简单了。当然,Python也是一门热门语言,对于人工智能的实现有着很大的帮助,因此,值得大家花时间去学习。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!![1]、python基础篇(十七)——Python中的一些易混淆点总结(上)[2]、python基础篇(十八)——Python中的一些易混淆点总结(中)[3]、python基础篇(十九)——Python中的一些易混淆点总结(下)

一消易混淆总结 第4篇

函数缓存允许我们将一个函数对于给定参数的返回值缓存起来。当一个I/O密集的函数被频繁使用相同的参数调用的时候,函数缓存可以节约时间。在Python 版本以前我们只有写一个自定义的实现。在Python 以后版本,有个lru_cache的装饰器,允许我们将一个函数的返回值快速地缓存或取消缓存。我们来看看,Python 前后的版本分别如何使用它。 我们来实现一个斐波那契计算器,并使用lru_cache。

具体执行结果如下:

那个maxsize参数是告诉lru_cache,最多缓存最近多少个返回值。我们也可以轻松地对返回值清空缓存,通过这样:

相关文章