python基础:列表推导式|迭代器|生成器|匿名函数
2022/1/30 9:34:18
本文主要是介绍python基础:列表推导式|迭代器|生成器|匿名函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、匿名函数(lambda)
个人理解为一种简单的定义函数的方式,不需要使用def关键字定义函数。语法:lambda 参数:操作参数表达式。
add = lambda x, y: x + y print(add(3, 5))
8
list(map(lambda x, y: x + y, range(-2, 2), range(1, 5))) #传入两个iterable对象range(-2, 2), range(1, 5)
[-1, 1, 3, 5]
2、推导式(comprehensions)
列表,字典和集合中都可以使用推导式。
列表推导式
一种简单创建列表的方法。
#if 语句置于for之后 In [29]: [x for x in range(1, 11) if x % 2 == 0] #对于range(1, 11)中每个元素,能被2整除的输出组成新列表 Out[29]: [2, 4, 6, 8, 10] #if 语句置于for之前可以使用else In [30]: [x if x % 2 == 0 else -x for x in range(1, 11)] #对于range(1, 11)中每个元素,能被2整除的输出原值,不能整除的取原值负数输出,组成新列表 Out[30]: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
字典推导式
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} {k:v for k,v in mcase.items()}
{'a': 10, 'b': 34, 'A': 7, 'Z': 3}
集合推导式
{x**2 for x in [1, 1, 2]}#集合不允许重复
{1, 4}
3、迭代器(Iterator)
可迭代对象(Iterable)
python中的对象,只要具有方法__iter__和__getitem__就是可迭代对象,可迭代对象能提供迭代器。
迭代器(Iterator)
被定义了__next__方法的python对象。
判断对象是否是可迭代对象或迭代器
from collections.abc import Iterable, Iterator def g(): yield 1 yield 2 yield 3 #是否为python可迭代对象判断 print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable))#isinstance()判断一个对象是否是Iterable对象 print('Iterable? \'abc\':', isinstance('abc', Iterable)) print('Iterable? 123:', isinstance(123, Iterable)) print('Iterable? g():', isinstance(g(), Iterable)) #是否为python迭代器判断 print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator))#isinstance()判断一个对象是否是Iterator对象 print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator)) print('Iterator? \'abc\':', isinstance('abc', Iterator)) print('Iterator? 123:', isinstance(123, Iterator)) print('Iterator? g():', isinstance(g(), Iterator))
Iterable? [1, 2, 3]: True Iterable? 'abc': True Iterable? 123: False Iterable? g(): True Iterator? [1, 2, 3]: False Iterator? iter([1, 2, 3]): True Iterator? 'abc': False Iterator? 123: False Iterator? g(): True
迭代(Iteration)
使用一个循环来遍历某个python对象时,这个过程就叫迭代。
4、生成器(Generators)
生成器也是一种迭代器,但是,只能对其迭代一次。这是因为它们并没有把所有的值存在内存中(可节省大量内存),而是边循环边生成值(生成器保存算法,可以计算下一个元素的值),创建生成器方法如下:
( )包围列表推导式生成
g = (x * x for x in range(10))#只迭代一次,只存储算法,不会生成所有元素存储于内存。 g
<generator object <genexpr> at 0x000002B53772C4C0>
for i in g:#for循环打印每个生成器中元素,在执行输出nothing(只迭代一次,只存储算法) print(i)
0149162536496481
自定义函数中添加yield关键字构建生成器
推算算法很复杂时使用自定义函数。举个例子,计算斐波那契数列的生成器。
def fibon(n): a = b = 1 for i in range(n): yield a#该函数为一个生成器 a, b = b, a + b for x in fibon(1000000): print(x) #不用担心它会使用大量资源
这篇关于python基础:列表推导式|迭代器|生成器|匿名函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01Python编程基础知识
- 2024-11-01Python编程基础
- 2024-10-31Python基础入门:理解变量与数据类型
- 2024-10-30Python股票自动化交易资料详解与实战指南
- 2024-10-30Python入行:新手必读的Python编程入门指南
- 2024-10-30Python入行:初学者必备的编程指南
- 2024-10-30Python编程入门指南
- 2024-10-30Python量化交易学习:新手入门指南
- 2024-10-30Python股票自动化交易实战入门教程
- 2024-10-29Python股票自动化交易教程:新手入门指南