【问题标题】:equivalent of `a?b:c` [duplicate]相当于`a?b:c` [重复]
【发布时间】:2011-08-25 02:51:33
【问题描述】:

可能重复:
Python Ternary Operator

我想在 python 中打印出一个字符串。我不想这样做:

if isfemale_bit:
    print 'F'
else:
    print 'M'

我现在最好的是print ['M', 'F'][int(isfemale_bit)]?

有更好的选择吗?

我需要我的语法糖!!

【问题讨论】:

  • 不,您需要尽可能清晰、最明显和最可维护的代码。为什么要模拟一个比混淆机制好一点的运算符?
  • 我喜欢您的原始解决方案,但 ('M', 'F')[int(isfemale_bit)] 是最佳版本。您应该能够为像您这样的狡猾的解决方案表示赞赏。
  • @freegnu:错误;你应该每次都选择清晰而不是聪明的黑客。
  • 也许您可以花一些时间来解释一下上述声明的哪些部分不清楚。它易于阅读并简洁地执行所需的操作,并且是有效的 Python。也许我读错了。我总是愿意学习新的东西。你愿意用一两个失败的例子来支持你的观点和权威立场吗?或者,也许你应该将你对简洁代码的讨伐作为黑客的巫术,去 perl 部分,那里有更多的燃料。

标签: python


【解决方案1】:

在 Python 2.5 中,您可以像这样使用三元条件:

a if b else c

这里有更多讨论:Does Python have a ternary conditional operator?

【讨论】:

  • 这相当于b?a:c
  • @FrankVel 如果您指的是 C/C++ 表达式,那么是的。
  • @HelloGoodbye 问题标题询问a?b:c 的等价物,即b if a else c。这个答案的顺序是不同的。
  • @FrankVel 对不起,我读得有点快;我以为这是个问题。好点,它不等同于问题标题中的表达!
【解决方案2】:

三元运算符啊:

>>> print 'foo' if True else 'bar'
foo
>>> print 'foo' if False else 'bar'
bar

【讨论】:

    【解决方案3】:
     print 'F' if isfemale_bit else 'M'
    

    【讨论】:

      【解决方案4】:

      我猜你在 C 代码中寻找类似于 isfemale_bit?'F':'M' 的解决方案 所以你可以使用and-or 构造(见Dive Into Python

      print isfemale_bit and 'F' or 'M'

      【讨论】:

      • 如果and 计算结果为真,则返回第二个参数; or 返回其最后一个真实参数。您可以组合这些属性以获得三元运算符的等效项。有点难读,但可以。
      • @Paul Rosania,我了解它的工作原理。我不明白你为什么要这样做,永远。
      • 学习用 Python 进行思考,这是整个语言,然后才知道该语言的真正语法。 Python中冗长的语句只是显示了程序员的经验不足。即你还没有开始用 Python 思考。
      • @freegnu,我没有对任何语法大便——我在大便一个用例。您是在说三元运算符长篇大论吗?你说这是一个更好的选择吗?不过,我会收回我尖刻的问号——我有点粗鲁——对不起! :)
      • 这在 python 有一个三元运算符之前很常见(它相当新),但不再真正有意义了。如果您希望三元返回虚假值,如果您将其视为三元运算符,则会以非常难以调试的方式中断。这也比真正的三元更难阅读。我强烈反对。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2018-09-07
      • 2021-07-25
      • 2015-05-16
      • 2020-02-19
      • 1970-01-01
      相关资源
      最近更新 更多