[Python -and or ]Python 中 and or 之 我的理解

c代码:

int x = a>b?6,6;

这种语句Python中也有:

可以通过and or组合来实现。个人认为这种语句尽量少点好。

python把这类型的功能发扬光了大。但是由于这种组合比较绕,所以有时候比较纠结:

比如:

5 or 6 and 6  返回what?

0 or 5  返回what?

8 and 7  返回what?

于是整理了下:

1.pyhon 中用 0 ,‘’,[],(),{},None 来表示False,其它都是True.这个是基础

2.复习下C中短路的原理:

      在c中的if语句后面的条件语句 :以下用 A B C 分别表示 条件语句

      形如: if(A||B||C)在C语言中会怎么处理呢?

                因为存在短路 所以如果A为真,那么C语言根本就不会去test B和C的真假,整个表达式就是真。

      形如:  if(A&&B&&C)同理:

                因为存在短路 所以如果A为假,那么C语言根本就不会去test B和C的真假,整个表达式就是假。

      可以这样理解and最怕假。因为只要一个假,就全假了,or最怕真因为只要有一个真就全真了,

      还有很重要一点这里的所有的运算顺序都是从左到右的。

3.Python中也类似:

      所有的运算都是从左到右:

      形如A and B and C,Python会从A->C逐个test,将第一个假返回,如果没有一个是假,那返回最后一个,

      因为最后一个的真符合整个表达式的逻辑.

      形如 A or B or C,Ptthon 从左到右,将第一个真返回。如果到了最后还没发现真 那就将最后一个C返回,

      因为最后一个的假符合真个表达式的逻辑.

4. and 和 or的组合?

     因为and 和or 运算优先级相同,所以以下俩式是等价的:

      A or B and C  == (A or B) and C

     挨个运算就可以了。。。。

5.中间有括号咋办?

      括号以此类推即可。

 

总结完毕 呵呵

给个例子:

http://www.woodpecker.org.cn/obp/diveintopython-zh-5.4/zh-cn/dist/html/power_of_introspection/index.html

中的:

 def info(object, spacing=10, collapse=1):  
    """Print methods and doc strings.
   
    Takes module, class, list, dictionary, or string."""
    methodList = [method for method in dir(object) if callable(getattr(object, method))]
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
    print "/n".join(["%s %s" %
                      (method.ljust(spacing),
                       processFunc(str(getattr(object, method).__doc__)))
                     for method in methodList])
if __name__ == "__main__":                
    print info.__doc__
注意标颜色的code
 processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
中  (lambda s: " ".join(s.split()))  和(lambda s: s) 都是真,不明的参看1.
这样唯一不确定的就是 collapse :
如果collapse 为真,这样就有  A(真) and B(真) or C(真),  先计算 A and B,由于都是真直接返回 B。
                            于是源表达式等价于 B or C, B C都是真,于是返回了B
如果collapse 为假,这样就有  A(假) and B(真) or C(真),  先计算 A and B,返回 A。
                            于是源表达式等价于 A or C, 于是返回了C
于是我们学到 可以用变量的真假 来改变函数的行为。 usefully definitely!!!!!!!!
实现c中的?
a ?b,c 在大部分情况下等价于 a and b or c;
但是有特例:
>>> a = ""
>>> b = "second"
>>> 1 and a or b         
'second'
这里返回的是b
改进方法是
>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0] 
''
由于 [a] 是一个非空列表,所以它决不会为假。即使 a0 或者 '' 或者其它假值,列表 [a] 也为真,因为它有一个元素。
Quote from dive into python
 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值