您的位置:首页 > 编程语言 > Python开发

python中&和and的区别及三目运算符的实现

2018-02-14 23:19 477 查看

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~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息