学习python需要知道的5个高级特性!
Python是一种很漂亮的语言。使用简单但表达力强,但你是否充分利用了它所能提供的一切?
任何编程语言的高级功能通常都是通过丰富的经验发现的。您正在编写一个复杂的项目,并发现自己在stackoverflow上搜索某些内容。然后,您会遇到一个非常优雅的问题解决方案,它使用的是您以前不知道的Python特性!
这绝对是最有趣的学习方式:通过探索和意外去发现!
以下是Python编程语言中最有用的5个高级功能,当然更重要的是如何使用它们!
(1)Lambda函数
Lambda函数是一个小的匿名函数,匿名的意思是因为它实际上没有名称。
Python函数通常使用def a_function_name()的样式定义,但是对于lambda函数,我们根本不给它命名。我们这样做是因为lambda函数的目的是执行某种简单的表达式或操作,而无需完全定义函数。
lambda函数可以使用任意数量的参数,但必须始终只有一个表达式:

看看这有多容易!我们执行了一些基本的数学运算,而无需定义完整的函数。这是Python的众多功能之一,使其成为一种简洁易用的编程语言。
(2)Map
Map()是一个内置的Python函数,用于将函数应用于像列表或字典这样的元素序列。这是执行此类操作的非常干净且最重要的可读方式。

看看上面的例子!我们可以将我们的函数应用于单个列表或多个列表。实际上,您可以将map与您能想到的任何python函数一起使用,只要它与你正在操作的序列元素兼容。
(3)过滤
Filter内置函数与Map函数非常相似,它将函数应用于序列(列表、元组、字典)。关键的区别在于filter()只返回应用函数返回的元素为True。
请查看以下示例以获取说明:

我们不仅为每个列表元素评估True或False,filter()函数还确保仅返回匹配为True的元素。非常方便处理检查表达式和构建返回列表的两个步骤。
(4)Itertools
Python Itertools模块是一组用于处理迭代器的工具。迭代器是一种数据类型,可以在for循环中使用,包括列表、元组和字典。
使用Itertools模块中的函数将允许您执行许多迭代器操作,这些操作通常需要多行函数和复杂的列表理解。查看下面的示例,了解Itertools的神奇之处!

(5)生成器
生成器函数允许您声明一个行为类似于迭代器的函数,即它可以在for循环中使用。这大大简化了代码,并且比简单的for循环具有更高的内存效率。
考虑一个例子,我们想要将所有数字从1加到1000。下面代码的第一部分说明了如何使用for循环执行此操作。
现在,如果列表很小,比如长度为1000,那就好了。如果你想用一个庞大的列表,比如10亿浮点数,就会出现问题。使用for循环,在内存中创建大量memory chewing列表 - 并非每个人都有无限的内存来存储这样的东西! Python中的range()函数做同样的事情,它在内存中构建列表
代码的第(2)节说明了使用Python生成器对数字列表求和。生成器将创建元素并仅在需要时将它们存储在内存中,即一次一个。这意味着,如果你必须创建10亿个浮点数,那么只能一次将它们存储在内存中! Python中的xrange()函数使用生成器来构建列表。
这个故事的大致寓意如下:如果你有一个大范围生成列表,请使用生成器或xrange函数。如果您有一个真正对内存敏感的系统,如移动或边缘计算,这一点尤其正确。
话虽这么说,如果你想多次迭代列表并且它足够小以适应内存,那么最好使用for循环和range函数。这是因为generator和xrange将在每次访问时生成列表值,而range是一个静态列表,并且内存中已存在整数以便快速访问。
