0

以下片段

def expensive_function(x):
    return x

x = 10.5
(int(y) if y.is_integer() else y := expensive_function(x))

提高

SyntaxError: cannot use assignment expressions with conditional expression 

赋值表达式不能这样用吗?

如果不是,我的假设有什么问题:我的印象是这个想法是在单个表达式中为昂贵的操作预先分配一个虚拟值。


expensive_function(x)为了澄清这个想法,询问是否可以通过分配给虚拟变量来使用赋值操作来简化

def expensive_function(x):
    return x

x = 10.5
(int(expensive_function(x))
 if expensive_function(x).is_integer()
 else expensive_function(x))
4

2 回答 2

3

关于什么

z = int(y) if (y := expensive_function(x)).is_integer() else y

?


实际上,在 中a if cond else b,有两个条件表达式:a- 和 -b成员。但是中间成员,即那个cond不是有条件的:它总是被评估的,这解释了为什么在那里使用赋值运算符不会引发错误。


可以使用 3.8 之前的方法(即没有Walrus Operator

z = (
    lambda y: int(y) if y.is_integer() else y
)(
    expensive_function(x)
)
于 2020-10-16T14:24:56.367 回答
1
int(y) if y.is_integer() else y := expensive_function(x)

相当于

def foo(x):
  if y.is_integer():
     return int(y)
  else:
     y = expensive_function(x)
     return y
foo(x)

现在你可以看到问题出在哪里了。y没有定义!

于 2020-10-16T14:22:15.333 回答