`
calmness
  • 浏览: 349930 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Python笔记之and or陷阱

阅读更多
    最近开始接触python,整体的感觉很不错,但是也存在不少的陷阱,比如and or的用法就是一个。

    第一次接触python的and or语法的时候,第一个感觉就是它的返回值是true or false,然而实际上并不是,它是直接返回or前后两个表达式的值,这更像java中的": ?",如:
>>> ""and"b"or"c"
'c'

在python里,""空字串看作是False,所以以上表达式返回"c",看起来和java的": ?"一样吧,然而如此认为就大错特错了,其实在这里就存在一个陷阱,看如下代码:
>>> "b"and""or"c"
'c'

以上代码目的是判断是"b"的时候返回空字符串,否则返回"c",然而本来应该返回""空字符串,可是实际上的结果却出乎意料,返回的是"c"。

原来and or首先会对and前后表达式进行判断,只有都为True才会返回and之后那个表达式的值,而上面代码由于and后是个""空字符串,所以结果为False,就返回"c"。

那么如何解决这个问题呢?其实我们可以利用python的list,看如下代码:
>>> ["b"][0]and[""][0]and["c"][0]
''

将实际的字符串封装进list中,这样对于and来说,后面是一个非空list,返回结果就是True,因此最终就可以达到避免该陷阱的目的。
分享到:
评论
2 楼 simohayha 2008-08-30  
In other words, x and y first evaluates x. If x is false, the result is x; otherwise, the result is y. Similarly, x or y first evaluates x. If x is true, the result is x; otherwise, the result is y.

1 楼 victorsos 2008-08-12  
Python 2.5中可以用 value1 if expression else value2 来代替 expression and  or value2

""and"b"or"c" -> "b" if "" else "c"
"b"and""or"c" -> "" if "b" else "c"

感觉这样比and or理解上也容易些

相关推荐

Global site tag (gtag.js) - Google Analytics