在Python中是否有特纳利条件操作器?
当前回答
有多种方式,最简单的是在“印刷”方法中使用状态。
你可以使用
print("Twenty" if number == 20 else "Not twenty")
相当于:
if number == 20:
print("Twenty")
else:
print("Not twenty")
因此,可以打印超过两份声明,例如:
if number == 20:
print("Twenty")
elif number < 20:
print("Lesser")
elif 30 > number > 20:
print("Between")
else:
print("Greater")
可以写作如:
print("Twenty" if number == 20 else "Lesser" if number < 20 else "Between" if 30 > number > 20 else "Greater")
其他回答
从文档中:
条件表达式(有时称为“永久运营商”)具有所有 Python 操作的最低优先事项. 表达式 x 如果 C 其他 y 首先评估条件, C (不是 x); 如果 C 是真实的, x 被评估并返回值; 否则, y 被评估并返回值。
此分類上一篇: 最新版本 2.5.
做事的神秘方式:
"true" if var else "false"
但是,总是有不同的方式来做一个温和的状态:
"true" and var or "false"
作为Python Enhancement Proposal 308的一部分,2006年在Python中添加了一个条件表达的操作员,其形式不同于常见的?:操作员,它看起来如下:
<expression1> if <condition> else <expression2>
相当于:
if <condition>: <expression1> else: <expression2>
下面是一个例子:
result = x if a > b else y
可使用的另一个合成(可与 2.5 之前的版本兼容):
result = (lambda:y, lambda:x)[a > b]()
工人被精心评估。
另一种方式是通过索引一个<unk>(不符合大多数其他语言的条件运营商):
result = (y, x)[a > b]
或明确构建的词典:
result = {True: x, False: y}[a > b]
另一个(不太可靠),但更简单的方法是使用和和或运营商:
result = (a > b) and x or y
但是,如果 x 是虚假的,它就不会工作。
一个可能的工作岗位是创建 x 和 y 列表或列表如下:
result = ((a > b) and [x] or [y])[0]
或:
result = ((a > b) and (x,) or (y,))[0]
如果您正在使用字典,而不是使用一个温和的条件,您可以利用获得(关键,默认),例如:
shell = os.environ.get('SHELL', "/bin/sh")
来源:?:在维基百科的Python
很常见需要根据一个条件将一个值或另一个值分配给一个变量。
>>> li1 = None
>>> li2 = [1, 2, 3]
>>>
>>> if li1:
... a = li1
... else:
... a = li2
...
>>> a
[1, 2, 3]
下面是<unk>形状,但这不是最简短的方式 - 见最后一个例子。
>>> a = li1 if li1 else li2
>>>
>>> a
[1, 2, 3]
>>>
>>> a = li1 or li2
>>>
>>> a
[1, 2, 3]
>>>
上述工作,因为 li1 是 无 和 翻译者 将其视为 逻辑表达中的虚假 然后 翻译者 移动并评估第二个表达,这不是 无 和 它不是一个空白的列表 - 因此,它被归咎于 a。
这也适用于空白列表,例如,如果你想分配一个任何列表都有项目。
>>> li1 = []
>>> li2 = [1, 2, 3]
>>>
>>> a = li1 or li2
>>>
>>> a
[1, 2, 3]
>>>
>>> s1 = ''
>>> s2 = 'hello world'
>>>
>>> a = s1 or s2
>>>
>>> a
'hello world'
>>>
我明白,有些人可能会说这不是一个很好的风格选择,因为它依赖于机械,不立即显而易见的所有开发人员. 我个人不同意这个观点. Python 是一个合成丰富的语言,有很多愚蠢的技巧,不立即显而易见的破坏者。
不幸的是,该
(falseValue, trueValue)[test]
解决方案没有短循环行为;因此,无论情况如何,FalseValue和 trueValue都被评估,这可能是低优化或甚至错误(即 trueValue和 falseValue都可能是方法,并且有副作用)。
其中一个解决方案将是
(lambda: falseValue, lambda: trueValue)[test]()
(执行延迟到获胜者知道;)),但它引入可称和不可称的对象之间的不一致性。
因此,故事正在进行 - 选择上述三个解决方案是使用至少Python 2.5(IMHO,不再是一个问题)和不倾向于“真实价值评估到虚假”错误之间的交换。
推荐文章
- Pandas和NumPy+SciPy在Python中的区别是什么?
- 将列表转换为集合会改变元素的顺序
- 静态隐式运算符
- 如何在matplotlib更新一个情节
- TypeError: ` NoneType `对象在Python中不可迭代
- 如何在Vim注释掉一个Python代码块
- python标准库中的装饰符(特别是@deprecated)
- 如何从外部访问本地Django web服务器
- 删除字符串的最后3个字符
- 在python中执行no-op的标准方法是什么?
- 如何从生成器构建numpy数组?
- 逗号运算符是做什么的?
- 什么时候我应该(不)想要在我的代码中使用熊猫apply() ?
- 数据类vs类型。NamedTuple主要用例
- 如何从macOS完全卸载蟒蛇