Python 为什么内联IF赋值需要else语句?

Python 为什么内联IF赋值需要else语句?,python,Python,这等于: x = 'foo' if x == 'bar' else x 但这会返回“无效语法”错误。有没有一个原因,为什么它会这样工作,或者设计决策背后的原因是什么?因为它是多行if函数(函数如示例2): 它工作得非常好 这是因为它不是一个语句,而是一个表达式。它必须计算为某个值,因此不能排除else条件。而且,因为它是一个表达式,所以您不能(实际上,您不应该)做任何会改变状态的事情 更多信息请点击此处: 当然,这样的事情是完全可能的: if x == 'foo': x = 'bar'

这等于:

x = 'foo' if x == 'bar' else x
但这会返回“无效语法”错误。有没有一个原因,为什么它会这样工作,或者设计决策背后的原因是什么?因为它是多行if函数(函数如示例2):


它工作得非常好

这是因为它不是一个语句,而是一个表达式。它必须计算为某个值,因此不能排除else条件。而且,因为它是一个表达式,所以您不能(实际上,您不应该)做任何会改变状态的事情

更多信息请点击此处:

当然,这样的事情是完全可能的:

if x == 'foo':
    x = 'bar'

…所以三元表达式中的突变状态实际上是不被禁止的;这是不推荐的。

python的咒语说应该只有一种方法来做事情。我们已经:

class C(object):
    def foo(self):
        self.y = 1
        return 'foo'

c = C()

c.foo() if True else 'bar'

print c.y

# Prints '1'
我们为什么要:

if x == 'foo': x = 'bar'

对于Python解释器,这行代码

x = 'bar' if x == 'foo'    
不是这样解释的

x = 'foo' if x == 'bar' else x
而是这样理解的:

(x = 'foo') if x == 'bar' else (x = x)
这是因为Python中的三元
xif-cond-else y
运算符是一个表达式而不是一个语句——它可以在任何指定值的地方使用

因此,您也可以使用它,例如,在您不做作业的情况下:

x = ('foo' if x == 'bar' else x)

因为它是一个表达式,所以它总是需要能够解析为某个值,这样该值就可以在表达式所使用的任何上下文中使用。

如果找不到else语句,则它默认为自身,这难道没有意义吗?或者在编程语言中实现类似的东西是不值得的,或者会破坏逻辑/设计?什么是“默认为自身”呢?在您的示例中,
x
可能尚未定义,或者它甚至可能没有被分配到变量-
print(如果x为2,则为1)
是有效代码。@Bernard:默认值到底是多少?没有"自身",;表达式不知道结果将用于什么<代码>'foo'if x=='bar'else x只是一个表达式,没有连接到任何赋值语句或任何你想使用它的东西。也许你把它与Ruby的
if
语法混淆了。我认为Python缺少这种语法是因为它的设计理念——应该有一种(最好只有一种)明显的方式来做事情。不管这是不是真的,这都不是问题的实际答案。这是非常正确的,但是第一条语句不是与“一行没有多个语句”?每当我这样做时,我的Pycharm总是对我咒骂。@Amber:“设计决定背后的原因是什么?”?“-我认为在此引用
导入此
是正确的,政治公众人物对此看法不好。但这是一种风格决定,不是一种语言decision@Eric我同意引用
导入此
,但我不同意忽略实际的技术原因而支持引用
导入此
。表达式/语句的差异是更关键的事实。
x = ('foo' if x == 'bar' else x)
print("hi" if x == 'bar' else "bye")