【问题标题】:Python ? (conditional/ternary) operator for assignments [duplicate]Python ? (条件/三元)赋值运算符[重复]
【发布时间】:2011-03-06 16:48:39
【问题描述】:

C 和许多其他语言都有conditional (AKA ternary) 运算符。这允许您根据条件的真实性在两个值之间做出非常简洁的选择,这使得表达式(包括赋值)非常简洁。

我想念这个,因为我发现我的代码有很多条件赋值,在 Python 中需要四行:

if condition:
    var = something
else:
    var = something_else

而在 C 中它会是:

var = condition ? something : something_else;

在一个文件中写一两次是可以的,但如果你有很多条件赋值,行数就会爆炸,最糟糕的是,它们会吸引眼球。

我喜欢条件运算符的简洁性,因为它可以防止我认为非策略性的事情在浏览代码时分散我的注意力。

那么,在 Python 中,您是否可以使用一种技巧将赋值放在一行上,以近似我概述的条件运算符的优点?

【问题讨论】:

    标签: python c language-features


    【解决方案1】:

    Python 有这样一个运算符:

    variable = something if condition else something_else
    

    或者,虽然不推荐(参见karadoc's comment):

    variable = (condition and something) or something_else
    

    【讨论】:

    • 那个“变量=条件和某事或某事_else”甚至不起作用。例如,“True and False or True”返回 True,而“True ? False : True”将返回 False。
    • Something 或 Something_else 可以正常工作吗?例如,如果某事为空,您会将其设置为某事_else?
    • @karadoc 正确但不好的例子&没有对第二个例子的解释:对于初学者:如果“某事”被认为是空的/假的 => 它被评估为False = > 所以你将永远不会得到 值,例如0(整数零)、""(空字符串)、[] 空数组、False 和其他“空”值 => 因为它们评估为 False => True and FalseFalse :) 一些语言甚至将 "0"(零作为字符串)视为空值 :)跨度>
    • 如果something 是一个表达式,它是否被延迟计算?
    【解决方案2】:

    在较旧的 Python 代码中,您可能会看到诀窍:

    condition and something or something_else
    

    但是,这已被非常出色的 ... if ... else ... 构造所取代:

    something if condition else something_else
    

    【讨论】:

    • 为什么“如果不是什么就返回”不起作用呢?
    • @Will:因为“如果不是什么就返回”在语法上不正确 Python?
    • @Will 可能是因为您没有提供else 部分?
    • 你可以return 1 if not cond else 2,因为它返回表达式1 if not cond else 2。但是您不能只使用return if not cond(即使使用else),因为if...else 是一个表达式:它的计算结果是一个值。您想使用 if 作为不同的 控制流。但是if not cond: return 没问题。
    猜你喜欢
    • 2021-08-27
    • 2017-07-16
    • 1970-01-01
    • 2018-08-14
    • 2019-03-31
    • 2013-08-13
    • 2011-09-18
    相关资源
    最近更新 更多