有条件赋值语句
-
假设有列表
buf = [[1], [2], [5], None, [], [7], ()]
,求buf内的数的和 -
这样有三种解决办法
sum_buf = 0 for i in buf: if i is not None: sum_buf += i[0]
sum_buf = 0: for i in buf: sum_buf += i[0] if i else 0
sum_buf = sum([i[0] for i in buf if i])
显然第三种用列表推导是最简洁的,但不适用于循环体内操作过于复杂的情况。
这时候第二种带if语句的赋值就更有效,既增加了程序的可读性又没有独立于循环体外增加复杂度
带if语句的赋值
-
最有代表性的应用场景是做对象操作而不确定变量名是否贴在目标对象上的时候,比如上例中的
None
、[]
、()
都是不能做索引操作的 -
None
、空列表、空元组、空字符串、0的bool值都是False,类通过支持__bool__
方法就可以使类支持bool运算;从而支持if、while、and等语句buf = [] a = buf.pop() if buf else 0