python中&和and的区别及三目运算符的实现
&和and的区别
python中的&符号延续的了C/C++的含义,指的是位运算
而用and来代替C/C++中的&&,来进行逻辑运算,实例如下:
>>> print(1 & 2) # 1 的二进制是 01,2的二进制是 10
0
>>> print(1 and 2)
2
要注意的是,在实例中,1 and 2的返回值是2,而不是1
因为在python中,由于短路效应:a and b,a为False,b不会被判断,直接返回a;a为True,表达式的值就取决于b,因此就返回b 。or运算同理,a or b,a为Ture,b不会被判断,直接返回a;a为False,表达式的值就取决于b,因此就返回b 。
这是与C/C++不一样的,在C/C++中,也有短路效应,但逻辑运算只返回0或1
>>> print(False and 1)
False
>>> print(0 and 1)
0
>>> print([] and 1)
[]
>>> print(2 and 1000)
1000
从上面例子中也可以看出,在a and b中,不论a,b是哪种形式,都是直接返回a,b本身的值
经典笔试题
这里以一道经典的笔试题为例,实际运用上述特性:
求1+2+3+…+n。但要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句。
分析:求解1+2+3+…+n,很容易想到的应该是递归,在不能使用条件判断语句的情况下,可以使用逻辑运算短路的方法得到递归停止的条件
def Sum_Solution(n):
ans=n
temp=ans and Sum_Solution(n-1)
ans=ans+temp
return ans
三目运算符
在C/C++中,有 ? : 三目运算符,在python中,也有同样的实现:
为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)
上述试题如果没有条件判断语句if else的限制,可以用三目运算2行代码实现
def Sum_Solution(n):
return n + Sum_Solution(n-1) if n > 0 else 0
Life is short, You need Python~