equivalent of `a?b:c`
Possible Duplicate:
Python Ternary Operator
我想用python打印一个字符串。我不想这样做:
1 2 3 4
| if isfemale_bit:
print 'F'
else:
print 'M' |
我现在所拥有的最好的是print ['M', 'F'][int(isfemale_bit)]?
有更好的选择吗?
我需要我的句法糖!!
- 不,您需要尽可能清晰、最明显和最可维护的代码。为什么要模拟一个比模糊机制好一点的运算符?
- 我喜欢你最初的解决方案,但是(‘M’、‘F’)【int(isfemale_bit)】是最佳版本。你应该能够为像你这样狡猾的解决方案而欢呼。
- @Freegnu:错了,你每次都应该选择清晰而不是聪明的黑客。
- 也许你可以花点时间解释一下上面陈述的哪些部分不清楚。它很容易阅读,并且可以简洁地执行所需的操作。也许我读错了。我总是愿意学习新东西。你愿意用一两个失败的例子来支持你的观点和权威立场吗?或者你应该把你对简洁代码的远征作为黑客的巫术,带到Perl部分,那里有更多的燃料来点火。
在Python2.5中,可以使用如下三元条件:
这里还有更多的讨论:python有三元条件运算符吗?
啊,三元运算符:
1 2 3 4
| >>> print 'foo' if True else 'bar'
foo
>>> print 'foo' if False else 'bar'
bar |
1
| print 'F' if isfemale_bit else 'M' |
我想您正在寻找一个类似于c代码中的o isfemale_bit?'F':'M'的解决方案因此,您可以使用and-or结构(参见dive into python)
print isfemale_bit and 'F' or 'M'
- 如果and的计算结果为真,则返回第二个参数;or返回最后一个真实参数。可以组合这些属性以获得三元运算符的等效值。有点难读懂,但它很管用。
- @保罗·罗莎尼亚,我理解它是如何运作的。我不明白的是你为什么要这么做。
- 在你大便语言的真正语法之前,先学会用整个语言的python来思考。python中冗长的语句只是显示了程序员的缺乏经验。也就是说,你还没有开始用Python思考。
- @Freegnu,我不会对任何语法进行poo-poo——我在对一个用例进行poo-poo。你打电话给三元接线员吗?你是说这是个更好的选择吗?不过,我还是要收回我那尖刻的问号——我有点粗鲁——对不起!:)
- 这在Python使用三元运算符(相当新)之前是很常见的,但现在不再真正有意义了。如果您希望三元返回错误的值,那么如果您将其视为三元运算符,这将以一种非常难调试的方式中断。这也比真正的三元更难理解。我强烈反对。
- 老实说,随着语言的发展,你会做什么?把你的头贴在地上,说新的语言元素不清楚是没有帮助的。权威性地说,新的语言元素不清楚、混乱或不安全是荒谬的,因为它是跛脚的。我建议你学习新的语言元素,不要再要求别人忽略和回避你可能不知道的语言中完全有效、安全、经过测试和清晰可理解的部分。