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

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~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海晨威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值