在之前,在诸如比较两个数大小的时候,一般的写法都是下面的样子javascript
if x > y: print("the max is x") else: print("the max is y")
三元表达式的语法为:java
True if expression else False
如今能够个体三元表达式来完成这种比较简单的判断python
res = x if x > y else y print(res)
列表解析的语法格式为mysql
[ i操做 for i in 列表 if 表达式1 and 表达式2]
如今有这样一个需求,把一个数字列表中的每一个值都取平方,把一个列表中的每一个字符串都转换为大写形式linux
能够这样写sql
l1 = range(1, 10, 2) l2 = [] for i in l1: l2.append(i**2) l3 = ['python', 'linux', 'javascript', 'mysql'] l4 = [] for j in l3: j = j.upper() l4.append(j) print(l2) print(l4)
那有没有简单的方式呢,能够使用列表解析,上面的例子则能够修改成express
l1 = range(1, 10, 2) l2 = [i**2 for i in l1] l3 = ['python', 'linux', 'javascript', 'mysql'] l4 = [j.upper() for j in l3] print(l2) print(l4)
列表解析获得的结果仍然是一个列表,列表解析的优势是:取值方便 缺点:很占系统资源,若是列表的长度较小时使用列表解析会很方便,可是若是列表的长度很大的时候,使用列表解析会占用不少的内存资源,此时能够使用生成器表达式来节省内存资源 来看下面的例子app
res = ( i**2 for i in range(100)) print(res)
获得的结果为spa
<generator object <genexpr> at 0x0000000002DA1AF0>
在上面的例子里,把列表解析表达式中的中括号换成小括号,那么表达式执行结果就变成了一个生成器code
咱们知道,生成器的本质就是迭代器,因此上面的表达式执行的结果生成器,能够使用for 循环来取值
res = ( i**2 for i in range(100)) for i in res: print(i)