当前位置: 首页 > 知识库问答 >
问题:

三元if-else语句中的语法错误

尉迟冯浩
2023-03-14

我们可以像这样使用if-field:

statement if condition else statement

但是这里有一些问题,我不明白为什么。

>

  • 如果我运行count=1 if True否则l = [](count已定义),则会引发错误:

     File "<ipython-input-5-d65dfb3e9f1c>", line 1
     count += 1 if True else l = []
                               ^
     SyntaxError: invalid syntax
    

    我们能不能先分配一个值?

    当我运行count=1 if False else l.append(count 1)(注意:count=0,l=[])时,将引发一个错误:

     TypeError    Traceback (most recent call last)
     <ipython-input-38-84cb28b02a03> in <module>()
     ----> 1 count += 1 if False else l.append(count+1)
    
     TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
    

    l的结果是。

    使用相同的条件,如果使用if-else块,则不会出现错误。

    你能解释一下区别吗?

  • 共有3个答案

    海保臣
    2023-03-14

    python中的单行if-ett语句更像是其他语言中的三元运算符。它不仅仅是if-ett块的更紧凑版本。单行if-ett计算为一个值,而if-ett块指定了应采取不同操作的条件。单行if-ett语句就像一个函数,在某些条件下返回一个值,如果条件为False则返回另一个值。

    因此,在您的示例中,当您编写count=1 if True否则l = []时,我认为您的意思是:

    if True:
        count += 1
    else:
        l = []
    

    但这条线真正的作用是:

    if True:
        count += 1
    else:
        count += l = []
    

    因此出现了语法错误。

    邢令
    2023-03-14

    对于您的第一个错误,您试图滥用三元表达式。在Python中,三元表达式不能包含它们包含表达式的语句。

    从Python的官方语法中可以看出,赋值是语句,方法调用是表达式。

    在您的示例中,l=[]被视为一个语句,而l.append(…) 是一个表达式。

    对于第二个错误,list.append返回,而不是列表。因此,您实际上是在尝试将添加到任何一个整数中,这是不允许的,因此TypeError

    最后,请不要使用小写L(L)或大写o(o)作为变量名。正如PEP 8中所述,由于它们与1和0的相似性,这些变量名可能会非常令人困惑。

    佟阳飙
    2023-03-14

    “条件表达式”A if C else B不是if/else语句的单行版本,if C:A;其他:B,但完全不同。第一个将计算表达式A或B,然后返回结果,而后者只执行语句A或B。

    更清楚的是,如果为True else,则计数=1 l=[]不是(计数=1)如果为True else(l=[]),而是计数=(如果为True else,则计数=1 l=[]),但l=[]不是表达式,因此出现语法错误。

    同样地,count=1 if Falsel.append(count 1)不是(count=1)if Falsel.append(count 1))而是count=(1 if Falsel.append(count 1))。从语法上讲,这是可以的,但是append返回,它不能添加到count中,因此是TypeError。

     类似资料:
    • 我对if else语句有些问题,请支持

    • Swift 条件语句 一个 if 语句 后可跟一个可选的 else if...else 语句,else if...else 语句 在测试多个条件语句时是非常有用的。 当你使用 if , else if , else 语句时需要注意以下几点: if 语句后可以有 0 个或 1 个 else,但是如果 有 else if 语句,else 语句需要在 else if 语句之后。 if 语句后可以有 0

    • else语句可以与if语句结合使用。 else语句包含else语句中的条件表达式解析为0或FALSE值时执行的代码块。 else语句是一个可选语句, else后面最多只能有一个else语句。 语法 (Syntax) if...else语句的语法是 - if expression: statement(s) else: statement(s) 流程图 (Flow Diagram) 例

    • 我得到了3个不同的错误:标识符预期,意外的令牌,未知的类:'score'。这些错误在第57-69行。 这个代码的重点是检查一个检查列表是否被检查,如果是,加1得分。它根据得分将输出文本更改为不同的字符串。 ^^XML代码^^

    • 着色器语言GLSL中关于if语句、for语句的使用,和javascript语言、C语言中的if语句、for语句执行逻辑规则基本一致,这里默认你已经有一定的编程基础,也就不做过多讲解,只是简单说明一下。 单独使用if if(x>100){ gl_FragColor = vec4(1.0,0.0,0.0,1.0);//红色 } if-else形式 bool colorBool; // 根据布尔值

    • 主要内容:if 语句,实例,if...else 语句,实例,if...else if...else 语句,实例,if...else 嵌套语句,实例Scala IF...ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: if 语句 if 语句有布尔表达式及之后的语句块组成。 语法 if 语句的语法格式如下: 如果布尔表达式为 true 则执行大括号内的语句块,否则跳过大括号内的语句块,执行大括号之后的语句块。 实