Python 的 and-or 技巧
布尔上下文
在 Python 中,可以在布尔上下文中使用几乎所有类型的表达式。通常的数据类型的“空值”都为 False。
None
为假值- 数值
0
,0.0
等为假值 - 空串
""
为假值 - 空列表
[]
为假值 - 空元组
()
为假值 - ...
逻辑演算
在 Python 中,and 和 or 按照下面的规则执行布尔逻辑演算:
对于 and,从左到右运算:
- 如果所有表达式都为真,则 and 返回最后一个表达式。
- 否则,and 返回第一个假值。
对于 or,从左到右运算:
- 如果有一个为真,则 or 立刻返回该值。
- 否则,or 返回最后一个表达式。
- or 找到第一个真值后会忽略计算剩余的表达式。
注意到:返回的并不是布尔值,而是其中某个参与比较的表达式值。
and-or 技巧
在 C 中,表达式 bool ? a : b
表示当 bool 为真时结果为 a,其它值则为 b。在 Python 中可以使用 and-or 实现类似的功能。
((test and [x]) or [y])[0]
在这个 Python 表达式中,如果 test 为真,则返回 x,否则返回 y。
这里使用列表将 x 和 y 括起来是为了防止 x 为空值的情况,比如想要实现:“如果 test 为真,则取 0,如果 test 为假,则取 1”,如果不将 0 括起来则为:
(test and 0) or 1
不论 test 是真是假,都只会返回 1。
Example:
有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。比如f(13)= 6,现在f(1)=1,
#算出f(n)=n的n是什么?
1 def count(n): 2 return n and str(n).count('1') + count(n-1) or 0
用迭代方法简单解决此问题。
这里就重新利用了and-or技巧,程序用一行完全代替了一个条件语句。
*******************************
工具至上
Email:zsc1528@gmail.com
QQ:2743230905
*******************************
posted on 2013-05-21 21:12 micky.zhou 阅读(329) 评论(0) 编辑 收藏 举报