1.列表解析:
列表解析,List comprehensions,源自函数式编程语言Haskell,是一个非常有用、简单灵活的工具,可以用来动态创建列表。
列表解析的语法:
[expr for iter_var in iterable]
虽然python中内建函数map()和filter(),lambda等支持函数式编程特征,但是列表解析表达式可以取代内建的这些函数以及lambda,且效率更高。
例如,生成一些平方数。
可以使用map()和lambda:
>>> map(lambda x: x ** 2, range(10))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
也可以使用列表解析来替换:
>>> [x ** 2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
使用列表解析,只有一次调用range(),而先前的语句有三次函数调用(range()、map()和lambda)。
另外列表解析还提供了过滤条件,加上if语句:
[expr for iter_var in iterable if cond_expr]
例如,筛选出奇数的平方:
>>> filter(lambda x: (x % 2) ** 2, seq)
[1, 9, 25, 49, 81]
也可以使用列表解析来完成:
>>> [x ** 2 for x in range(10) if x % 2]
[1, 9, 25, 49, 81]
还可以使用列表解析进行嵌套循环:
>>> [(x+1,y+3) for x in range(2) for y in range(3)]
[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)]
还有更多的例子不在此列举了。
2.生成器表达式:
生成器表达式是列表解析的一个扩展。列表解析的不足之处是需要生成所有数据,用以创建整个列表,在有大量数据的情况下,会占用更多的内存空间。
生成器表达式通过结合列表解析和生成器解决了整个问题。
生成器是特定的函数,允许返回一个值,然后“暂停”代码的执行,稍后恢复,使用关键字yield。
生成器表达式,并不真正创建列表,而是返回一个生成器,生成器表达式使用了延迟计算,使得内存使用上更有效。
语法格式:
(expr for iter_var in iterable if cond_expr)
生成器表达式和列表解析格式很相似,只不过生成器表达式返回的是一个生成器。
>>> g = (x ** 2 for x in range(10))
>>> g
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔