Python解析式生成器
举例生成一个列表,元素09,对每一个元素自增1后求平方返回新列表l1list(range(10))l2〔〕foriinl1:l2。append((i1)2)print(l2)使用列表解析式l1list(range(10))l2〔(i1)2foriinl1〕print(l2)列表解析ListComprehension语法〔返回值for元素in可迭代对象if条件〕使用中括号〔〕,内部是for循环,if条件语句可选返回一个新的列表列表解析式是一种语法糖编译器会优化,不会因为简写而影响效率,反而因优化提高了效率减少程序员工作量,减少出错简化了代码,但可读性增强列表解析进阶
〔exprforiteminiterableifcond1ifcond2〕
等价于ret〔〕foriteminiterable:ifcond1:ifcond2:ret。append(expr)举例
20以内,既能被2整除又能被3整除的数〔iforinrange(20)ifi20andi30〕〔iforinrange(20)ifi20ifi30〕生成器表达式Generatorexpression语法(返回值for元素in可迭代对象if条件)列表解析式的中括号换成小括号就行了返回一个生成器和列表解析式的区别生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值列表解析式是立即返回值生成器可迭代对象迭代器举例g({:04}。format(i)foriinrange(1,11))next(g)forxing:print(x)print()下面不会打出forxing:print(x)
总结延迟计算返回迭代器,可以迭代从前到后走完一遍后,不能回头