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

82 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Python 101:三元运算符
> 原文:<https://www.blog.pythonlibrary.org/2012/08/29/python-101-the-ternary-operator/>
有很多计算机语言都包含三元(或第三)运算符,这基本上是 Python 中的一行条件表达式。如果你感兴趣,你可以在维基百科上阅读其他语言的各种翻译方式。在这里,我们将花一些时间来看几个不同的例子,以及为什么你可能会在现实生活中使用这个操作符。
我记得在 C++中使用三元运算符时,它是一个问号。我用谷歌查了一下,在 StackOverflow 问答和前面提到的维基百科的例子中找到了一些很好的例子。让我们来看看其中的一些,看看我们是否能解决它们。下面是一个最简单的例子:
```py
x = 5
y = 10
result = True if x > y else False
```
这基本上是这样的:结果将是**真**是 x 大于 y否则结果是**假**。老实说,这让我想起了我见过的一些 Microsoft Excel 条件语句。有些人反对这种格式,但这就是官方的 [Python 文档](http://docs.python.org/release/3.0.1/reference/expressions.html#boolean-operations)所使用的格式。下面是如何在普通条件语句中编写它:
```py
x = 5
y = 10
if x > y:
print("True")
else:
print("False")
```
因此,使用三元运算符可以节省 3 行代码。无论如何,当你在一组文件上循环时,你可能想要使用这个结构,并且你想要过滤掉一些部分或行。在下一个例子中,我们将循环一些数字,检查它们是奇数还是偶数:
```py
for i in range(1, 11):
x = i % 2
result = "Odd" if x else "Even"
print(f"{i} is {result}")
```
您会惊讶于检查除法语句剩余部分的频率。这是一种快速判断数字是奇数还是偶数的方法。在前面提到的 StackOverflow 链接中,有一段有趣的代码,作为示例展示给那些仍在使用 Python 2.4 或更早版本的人:
```py
# (falseValue, trueValue)[test]
>>> (0, 1)[5>6]
0
>>> (0, 1)[5<6]
1
```
这是相当丑陋的,但它做的工作。这是索引一个元组,当然是一个黑客,但这是一段有趣的代码。当然,它没有我们之前看到的新方法的短路值,所以两个值都要计算。这样做你甚至会遇到奇怪的错误,其中 True 是 False反之亦然所以我不推荐这样做。
用 Python 的 lambda 做三元也有几种方法。这是之前提到的维基百科条目中的一条:
```py
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 行代码。当然,选择权在你。
### 附加阅读
* 表达式中的“条件句”( [Python 食谱](http://code.activestate.com/recipes/52310/))
* [Python Lambda](https://www.blog.pythonlibrary.org/2010/07/19/the-python-lambda/)
* Lambda 代替 if - [StackOverflow](http://stackoverflow.com/questions/7076703/lambda-instead-of-if-statement)
* [愚蠢的λ把戏](http://p-nand-q.com/python/stupid_lambda_tricks.html)包括一个三元例子