为什么在Python中 "return 100 if i < 10 else pass" 是无效的?

5
所有;
def foo(i):
    return 100 if i < 10 else pass
    return 200 if i < 20 else pass
    return 1

为什么这段代码在Python中不起作用?我认为这段代码可能与以下代码相同:
def foo(i):
    if i < 10:
        return 100
    elif i < 20:
        return 200
    else: 
        return 1

谢谢!


定义“为什么这不起作用”。如果我尝试定义函数,就会出现语法错误。这是你的意思吗? - Felix Kling
3
你认为这应该起作用的原因是什么?语言手册的哪一部分表明pass在此处适用?请提供一个链接或引用,以显示为什么这应该起作用。 - S.Lott
2
我曾经认为pass在其他语言中可能有与continuefor中的nextNOP相同的含义,但后来我认为return 100 if i < 10 else pass可以被理解为return 100 if i < 10 else 下一行,这是一个严重的错误。 - user478514
5个回答

19
文档中,你会看到"三元运算符"应该像这样:
conditional_expression ::=  or_test ["if" or_test "else" expression]
expression             ::=  conditional_expression | lambda_expr

而且 pass 是一个 语句 而不是一个表达式


10

像这样阅读你的代码:

return (100 if (i < 10) else pass)

pass不是你可以返回的值。 以下代码将起作用:

def foo(i):  
    return 100 if i < 10 else (200 if i < 20 else 1) 

1
在这两个示例中,表达式中的括号并不是必需的,但它们确实有助于使代码更易读。 - Mr. Lance E Sloan

10

如果i < 10,则返回100,否则不执行任何操作

您应该将其读作return (100 if i < 10 else pass), 所以pass不是一个值。


2

pass 是一个空操作,即执行它时,什么也不会发生。当需要语法上的语句但不需要执行代码时,它作为占位符很有用。但不应将其作为任何逻辑的一部分使用。


为什么要踩他的票?他误用了 pass,所以我澄清了它的正确用法。 - Hollister

0

你应该把函数读作

def foo(i):
    if i < 10:
        return 100
    else:
        return pass
    if i < 20:
        return 200
    else:
        return pass
    return 1

return 100 if i < 10 else pass 不是一个 "if" 语句,这是一个 三元运算符


3
return pass 不是有效语句。在 else 子句中仅使用 pass 就可以了。 - Hollister

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