【问题标题】:Am I right in thinking there is no way to put an if statement and an else statement on one line in Python?我是否认为没有办法在 Python 中将 if 语句和 else 语句放在一行上?
【发布时间】:2014-06-12 21:19:03
【问题描述】:

我是否认为我不能在 Python 中将 if 语句和相应的 else 语句放在一行中?

注意:

variable = value1 if condition else value2

不是两个语句。这是一个可以取两个表达式之一的值的语句。

我想做类似的事情

if condition a=value1 else b=value2

我认为这需要 Python 中的完整 if-else 是否正确?喜欢

if condition:
    a=value1
else:
    b=value2

注意正如我上面已经提到的(这是定义什么是语句和什么是表达式所固有的,每个程序员都应该熟悉),因为我分配了两个不同的变量,与上面的完全不同

if condition:
    a=value1
else:
    a=value2

我当然可以简单地使用条件表达式

a = value1 if condition else value2

因此我的问题不是Does Python have a ternary conditional operator?的重复

【问题讨论】:

  • 出于兴趣,您为什么要这样做?
  • 漂亮的代码。像这样的几十个简短语句,每行一行比每行四行更好看!
  • 如果你有几十个相关但不同的变量,我认为你的代码需要重构。
  • “美丽的代码”,在我看来,不包括单行黑客本身。 Readability counts!
  • 链接的问题不是重复的。

标签: python if-statement


【解决方案1】:

Python 要求您将 if 和 else 放在不同的行,因为不这样做会使您的代码难以阅读,并且很容易编写令人不快的不可读代码。

使用此功能,您的代码实际上不太可能更好。

请考虑使用函数来为您的代码赋予更有意义的方面,通过返回一个元组,您可以同时更改 ab

【讨论】:

  • 这根本不是答案...因为赋值不会导致返回值...(与您不能做(print "yellow") if condition else (print "5555)"的原因相同)
  • @JoranBeasley:不。OP 是在谈论通常的控制流 if: 和 'else:` 结构,而不是三元 a if x else b 运算符。
  • 哦,我明白了……我想我没明白……我以为他只是在谈论 if/else,每个分支都有一个分配
  • @JoranBeasley 你为什么用“他”?
  • 对不起习惯的力量...通常我说 OP
【解决方案2】:
my_items = {}
my_items["a" if condition else "b"] = value

我认为会更好......

但你可以这样做

globals()["a" if condition else "b"] = value

这将完全按照您的要求进行(尽管一般来说这是不受欢迎的)

如果你想变得非常恶心,你可以这样做

eval("a=value1" if condition else "b=value2") 

但我永远不会建议实际做这样的事情

说实话,我很难想到您真正想要的任何有效用例

if condition:
  a = value1
else:
  b = value2

【讨论】:

  • 谢谢! :) 这仍然不是两个单独的语句,如果我希望值也是有条件的怎么办?抱歉,我举了一个过于简单的例子。
【解决方案3】:

实际上并不推荐它,但您也可以使用元组解包:

a,b = (value1 if condition else a), (value2 if not condition else b)

【讨论】:

  • 或更短:a,b = value1, b if condition else a, value2
  • 谢谢! :) 我认为这可能会让人们感到困惑。
  • @Louise 如果您不想让人们感到困惑,请将这些语句放在单独的行中,至少在使用 Python 时是这样。 Python 对空格敏感是有原因的:提高可读性。
猜你喜欢
  • 2012-12-11
  • 2019-04-09
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 2019-08-27
  • 2020-03-20
  • 1970-01-01
  • 2021-04-05
相关资源
最近更新 更多