在Python中是否有特纳利条件操作器?
当前回答
从文档中:
条件表达式(有时称为“永久运营商”)具有所有 Python 操作的最低优先事项. 表达式 x 如果 C 其他 y 首先评估条件, C (不是 x); 如果 C 是真实的, x 被评估并返回值; 否则, y 被评估并返回值。
此分類上一篇: 最新版本 2.5.
其他回答
一个替代Python的条件表达
"yes" if boolean else "no"
是如下:
{True: "yes", False: "no"}[boolean]
有下列好延伸:
{True: "yes", False: "no", None: "maybe"}[boolean_or_none]
最短的替代品
("no", "yes")[boolean]
因为它是以子类(bool, int)为作用。
注意,但是:替代
yes() if boolean else no()
不是
(no(), yes())[boolean] # bad: BOTH no() and yes() are called
但
(no, yes)[boolean]()
這工作很好,只要沒有,是的,應該用相同的數字呼叫。
yes("ok") if boolean else no() # (1)
或在
yes("ok") if boolean else no("sorry") # (2)
因此,相似的替代品既不存在(一)又几乎不可行(二)。(在罕见的情况下,根据背景,某种类似的
msg = ("sorry", "ok")[boolean]
(no, yes)[boolean](msg)
可以有意义( )
谢谢Radek Rojík的评论
其他答案是正确的谈论Python操作员. 我想补充提到一个场景,操作员经常使用,但有一个更好的字符。
假设我们希望使用选项_值与默认值,如果它没有设置:
run_algorithm(option_value if option_value is not None else 10)
或者,如果选项_值从未设置为虚假值(0,“”,等),
run_algorithm(option_value if option_value else 10)
但是,在这种情况下,一个越来越好的解决方案只是写作。
run_algorithm(option_value or 10)
在Python中,Ternary Operator的合成是:
假如他是真實的,
使用这个合成,这里是我们如何使用Python的Ternary操作器重写上面的代码:
game_type = 'home'
shirt = 'white' if game_type == 'home' else 'green'
请注意,表达式可能是任何类型的表达式,包括函数呼叫,返回值,评估为真实或虚假。
许多从 C 产生的编程语言通常具有以下条件运营商的合成:
<condition> ? <expression1> : <expression2>
起初,Python的善良独裁者为生命(我指的是Guido van Rossum,当然)拒绝它(作为非Pythonic风格),因为它是相当难以理解的人不使用C语言。
<expression1> if <condition> else <expression2>
因此,首先,它评估了状态. 如果它返回真,表达1将被评估给结果,否则表达2将被评估。
下面是几个例子(条件将从左向右评估):
pressure = 10
print('High' if pressure < 20 else 'Critical')
# Result is 'High'
Ternary 运营商可以分为序列:
pressure = 5
print('Normal' if pressure < 10 else 'High' if pressure < 20 else 'Critical')
# Result is 'Normal'
下一个与前一个相同:
pressure = 5
if pressure < 20:
if pressure < 10:
print('Normal')
else:
print('High')
else:
print('Critical')
# Result is 'Normal'
是的,它有,但它与C类似的编程语言不同(这是条件? value_if_true : value_if_false
在 Python 中,它如下: value_if_true 如果另一个条件值_if_false
例如: even_or_odd = “even” 如果 x % 2 == 0 其他 “odd”
推荐文章
- Pandas和NumPy+SciPy在Python中的区别是什么?
- 将列表转换为集合会改变元素的顺序
- 静态隐式运算符
- 如何在matplotlib更新一个情节
- TypeError: ` NoneType `对象在Python中不可迭代
- 如何在Vim注释掉一个Python代码块
- python标准库中的装饰符(特别是@deprecated)
- 如何从外部访问本地Django web服务器
- 删除字符串的最后3个字符
- 在python中执行no-op的标准方法是什么?
- 如何从生成器构建numpy数组?
- 逗号运算符是做什么的?
- 什么时候我应该(不)想要在我的代码中使用熊猫apply() ?
- 数据类vs类型。NamedTuple主要用例
- 如何从macOS完全卸载蟒蛇