geekdoc-python-zh/docs/pythonlibrary/python-101-the-ternary-oper...

4.2 KiB
Raw Permalink Blame History

Python 101:三元运算符

原文:https://www.blog.pythonlibrary.org/2012/08/29/python-101-the-ternary-operator/

有很多计算机语言都包含三元(或第三)运算符,这基本上是 Python 中的一行条件表达式。如果你感兴趣,你可以在维基百科上阅读其他语言的各种翻译方式。在这里,我们将花一些时间来看几个不同的例子,以及为什么你可能会在现实生活中使用这个操作符。

我记得在 C++中使用三元运算符时,它是一个问号。我用谷歌查了一下,在 StackOverflow 问答和前面提到的维基百科的例子中找到了一些很好的例子。让我们来看看其中的一些,看看我们是否能解决它们。下面是一个最简单的例子:

x = 5
y = 10
result = True if x > y else False

这基本上是这样的:结果将是是 x 大于 y否则结果是。老实说,这让我想起了我见过的一些 Microsoft Excel 条件语句。有些人反对这种格式,但这就是官方的 Python 文档所使用的格式。下面是如何在普通条件语句中编写它:

x = 5
y = 10

if x > y:
    print("True")
else:
    print("False")

因此,使用三元运算符可以节省 3 行代码。无论如何,当你在一组文件上循环时,你可能想要使用这个结构,并且你想要过滤掉一些部分或行。在下一个例子中,我们将循环一些数字,检查它们是奇数还是偶数:

for i in range(1, 11):
    x = i % 2
    result = "Odd" if x else "Even"
    print(f"{i} is {result}")

您会惊讶于检查除法语句剩余部分的频率。这是一种快速判断数字是奇数还是偶数的方法。在前面提到的 StackOverflow 链接中,有一段有趣的代码,作为示例展示给那些仍在使用 Python 2.4 或更早版本的人:

# (falseValue, trueValue)[test]
>>> (0, 1)[5>6]

0
>>> (0, 1)[5<6]

1

这是相当丑陋的,但它做的工作。这是索引一个元组,当然是一个黑客,但这是一段有趣的代码。当然,它没有我们之前看到的新方法的短路值,所以两个值都要计算。这样做你甚至会遇到奇怪的错误,其中 True 是 False反之亦然所以我不推荐这样做。

用 Python 的 lambda 做三元也有几种方法。这是之前提到的维基百科条目中的一条:

def true():
    print("true")
    return "truly"
def false():
    print("false")
    return "falsely"

func = lambda b,a1,a2: a1 if b else a2
func(True, true, false)()

func(False, true, false)()

这是一些古怪的代码,尤其是如果你不理解 lambdas 是如何工作的。基本上lambda 是一个匿名函数。这里我们创建了两个正常的函数和一个 lambda 函数。然后我们用一个布尔值 True 和一个 False 来调用它。在第一次调用中,如下所示:如果布尔值为真,则调用 true 函数,否则调用 false 函数。第二个稍微有点混乱,因为它似乎是说如果布尔为 false你应该调用 true 方法,但它实际上是说只有当 b 为布尔 False 时,它才会调用 False 方法。是啊,我也觉得有点困惑。

包扎

在下面的“补充阅读”一节中,还有几个其他的三元运算符的例子,您可以查看一下,但是现在您应该已经很好地掌握了如何使用它以及何时使用它。当我知道我需要创建一个简单的真/假条件,并且我想节省几行代码时,我个人会使用这种方法。然而,我经常倾向于使用显式而不是隐式,因为我知道我必须回来维护这些代码,而且我不喜欢总是不得不弄清楚这种奇怪的东西,所以我可能会直接写下这 4 行代码。当然,选择权在你。

附加阅读