
之前一直以为Python中and、or 这两个表达式的返回值是True 或者 False,今早帮同学解答问题时才发现之前的理解是错误的。同学遇到的问题如下:
def not_empty(str):
return str and str.strip()
list(filter(not_empty,['A','B',None,'C',' ']))
她不理解的是not_empty函数为什么要这样写,我最初的解答为:
- 若
str为None,则返回False - 若
str非None:str.strip()为空串''则返回False,否则返回True
但是尝试运行几个示例之后,发现not_empty返回值并不是bool类型,而是两个操作数其中的一个。于是查阅Python3官方文档,找到了合理地解释:
1. Boolean Operators

2. Truth Value Testing

3. filter

4. 解释
str and str.strip() 相当于 if str then str.strip() else str,所以not_empty返回的是两个操作数其中的某一个,记为value;filter然后会对返回值用if value进行判断。至于if表达式如何判断,见上述的真值规则。
(完)