之前一直以为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
表达式如何判断,见上述的真值规则。
(完)