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

本文详细探讨了Python中逻辑运算符and与or的工作原理及应用技巧,包括它们如何处理真假值,以及如何通过这些运算符改变函数行为。此外,还介绍了如何使用and与or模拟C语言中的三元操作符。

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
 

 

 

 

 

 

 

 

 

 

Python 中,andor 是逻辑(布尔)运算符,可对逻辑(布尔)变量进行与或运算,当变量为数值变量时,也会按特定规则进行运算 [^2]。 ### 基本运算规则 - **and 运算符**:当 a 和 b 为逻辑变量时,若 a、b 都为 True,则返回 True;当 a 和 b 为数值变量时,返回 b [^2]。示例如下: ```python print(True and False) # 输出 False print(2 and 1) # 输出 1 ``` - **or 运算符**:当 a 和 b 为逻辑变量时,若 a、b 中有一个为 True,则返回 True;当 a 和 b 为数值变量时,若 a 是非 0 值,则返回 a,否则返回 b [^2]。示例如下: ```python print(True or False) # 输出 True print(2 or 1) # 输出 2 ``` ### 优先级 在 Python 中,and 的优先级高于 or。若两个表达式中同时包含 andor 运算符,则 and 运算符会优先于 or 运算符被计算 [^1]。例如表达式 `0 and 3 or 1 or 4`,先进行 and 运算,因为 0 为假值,所以 `0 and 3` 的结果为 0;然后进行 `0 or 1` 运算,1 为真值,所以结果为 1;最后进行 `1 or 4` 运算,1 为真值,最终返回结果为 1 [^3]。示例代码如下: ```python result = 0 and 3 or 1 or 4 print(result) # 输出 1 ``` ### 运算法则 - **纯 and 语句**:若每一个表达式都不是假的,那么返回最后一个表达式的值;若有一个表达式为假,则返回假 [^4]。示例如下: ```python print(1 and 2 and 3) # 输出 3 print(1 and 0 and 3) # 输出 0 ``` - **纯 or 语句**:只要有一个表达式不是假的,就返回这个表达式的值;只有所有表达式都是假的,才返回假 [^4]。示例如下: ```python print(0 or 2 or 3) # 输出 2 print(0 or 0 or 0) # 输出 0 ``` - **orand 混合语句**:碰到 and 就往后匹配,碰到 or 时,如果 or 左边的表达式为真,那么就返回 or 左边的那个值;如果 or 左边为假,则继续匹配 or 右边的参数 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值