Python解析式生成器
举例 生成一个列表,元素0-9,对每一个元素自增1后求平方返回新列表 l1 = list(range(10)) l2 = [] for i in l1: l2.append((i+1)**2) print(l2) #使用列表解析式 l1 = list(range(10)) l2 =[(i+1)**2 for i in l1] print(l2) 列表解析List Comprehension语法[返回值 for 元素 in 可迭代对象 if 条件] 使用中括号[],内部是for循环,if条件语句可选 返回一个新的列表 列表解析式是一种语法糖编译器会优化,不会因为简写而影响效率,反而因优化提高了效率 减少程序员工作量,减少出错 简化了代码,但可读性增强 列表解析进阶
[expr for item in iterable if cond1 if cond2]
等价于 ret = [] for item in iterable: if cond1: if cond2: ret.append(expr) 举例
20 以内,既能被2整除又能被3整除的数 [i for in range(20) if i%2==0 and i%3==0] [i for in range(20) if i%2==0 if i%3==0] 生成器表达式Generator expression语法(返回值 for 元素 in 可迭代对象 if 条件) 列表解析式的中括号换成小括号就行了 返回一个生成器 和列表解析式的区别生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值 列表解析式是立即返回值 生成器可迭代对象 迭代器 举例g = ("{:04}".format(i) for i in range(1,11)) next(g) for x in g: print(x) print("++++++++++++++") #下面不会打出 for x in g: print(x)
总结 延迟计算 返回迭代器,可以迭代 从前到后走完一遍后,不能回头