Python中的一行if else条件语句

11
def sum10(a, b):
    if sum([a, b]) % 10 == 0: return True; return False

print sum10(7, 3)
print sum10(-13, -17)
print sum10(3, 8)

结果是:

True
True
None

不是我期望的:

True
True
False

有什么想法吗?

6个回答

31

你的代码

def sum10(a, b):
    if sum([a, b]) % 10 == 0: return True; return False

等同于

def sum10(a, b):
    if sum([a, b]) % 10 == 0: 
        return True; return False

所以return False不会被评估。


其中一些(可能无穷无尽的)替代方案:

    if sum([a, b]) % 10 == 0: 
        return True
    return False
或者
    return sum([a, b]) % 10 == 0
    return True if sum([a, b]) % 10 == 0 else False
或者
    return False if (a+b) % 10 else True

或者(在我看来最易读的)

    return not (a + b) % 10

谢谢Steak先生。还有一个问题,您能把“Better use 1”写成一行吗? - mko
@yozloy 我添加了更多的例子。 - sloth

10

这就是您想要的。

def sum10(a, b):
    return sum([a, b]) % 10 == 0

Python中的三元If表达式工作方式如下:

<True Statment> if <Conditional Expression> else <False Statement>

例如

True if sum([a,b]) % 10 == 0 else False

我也可以建议使用加号运算符吗?

True if (a+b) % 10 == 0 else False

感谢您提供三元解决方案。 - mko

2
如果您想要if-else的一行代码,应该按照以下方式编写:

如果您想要if-else的一行代码,应该按照以下方式编写:

return True if sum([a, b]) % 10 == 0 else False

注意那个一行代码中没有冒号。

再次感谢 @alestanis 回答我的问题,三元运算符是正确的选择。 - mko

1
def sum10(a, b):
    return sum([a, b])%10 == 0

4
这里的一些解释会让人感激不尽。 - rubicks

1

我认为return False从未被执行,因为它在if语句内部而不是外部。

因此,当您在if条件中得到true时,您将执行return True,但永远不会执行第二个语句。


+1 对于好的解释,我认为我应该坚持三元方式。 - mko

0

不要立即返回True或False,你可以尝试将结果存储在布尔变量中,然后在最后返回该变量。例如:

def sum(a,b):
  bool result
  if sum([a, b]) % 10 == 0:
    bool=True
  else:
    bool=False
  return bool 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接