Python的三目运算符

Posted Mango886

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的三目运算符相关的知识,希望对你有一定的参考价值。

在Python中,可以通过and,or和not进行逻辑运算,下面就来看看and和or的简单介绍。

逻辑与-and

对于包含and运算的表达式,Python解释器将从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值

下面看一个使用and的例子:

复制代码
# if all the expressions are true, return the last expression
print {"name": "Will"} and "hello" and 1

# return the first false expression
print {"name": "Will"} and "" and 1
print {"name": "Will"} and [] and 1
print {} and [] and None
print {"name": "Will"} and [1] and None
复制代码

代码的输出为下:

逻辑或-or

对于包含or运算的表达式,Python解释器将从左到右扫描,返回第一个为真的表达式值,无真值则返回最后一个表达式值

看下面的例子:

复制代码
# if all the expressions are false, return the last expression
print {} or [] or None

# return the first true expression
print {"name": "Will"} or "hello" or 1
print {} or [1] or 1
print {} or [] or "hello"
复制代码

代码的输出如下:

三目运算符

很多语言中都支持三目运算符"bool?a:b",虽然在Python中不支持三目运算符,但是可以通过and-or达到同样的效果。

expression_1 and expression_2 or expression_3

看代码:

a = "hello"
b = "will"

# bool?a:b
print True and a or b
print False and a or b

这个例子通过and-or模拟了三目运算符,当第一个表达式expression_1为True的时候,整个表达式的值就是expression_2表达式的值:

安全的and-or

其实上面使用and-or模拟三目运算符的方式并不安全,看下图:

如果expression_2本身的值就是False,那么无论expression_1的值是什么,"expression_1 and expression_2 or expression_3"的结果都会是expression_3。

可以通过简单的代码就行验证:

a = []
b = "will"

# bool?a:b
print True and a or b
print False and a or b

代码输出为:

那么为了避免这种问题,可以使用下面的方法,将expression_2和expression_3存放在list中:

(expression_1 and [expression_2] or [expression_3])[0]

例如:

a = []
b = "will"

# bool?a:b
print (True and [a] or [b])[0]
print (False and [a] or [b])[0]

代码的运行效果为下,即使expression_2为False,但是[expression_2]仍是非空列表:

总结

本文通过一些简单的例子,演示了Python中and和or的使用。

并通过and-or方式实现了三目运算符的效果。  

以上是关于Python的三目运算符的主要内容,如果未能解决你的问题,请参考以下文章

python和java中的三目运算符

python和java中的三目运算符

Python之三目运算符

Java中的三目运算符可能出现的问题

Java中的三目运算符

js中的三目运算符详解