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

标签 python conditional-operator

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

statement if condition else statement

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

  1. 如果我运行 count += 1 if True else l = [](已经定义了 count),则会引发错误:

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

    我们不能在else之后赋值吗?

  2. 当我运行 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 的结果是 [1]

使用相同的条件,如果我使用 if-else block ,则没有错误。

你能解释一下区别吗?

最佳答案

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

更清楚的是,count += 1 if True else l = [] not (count += 1) if True else (l = [] ),但 count += (1 if True else l = []),但 l = [] 不是表达式,因此出现语法错误。

同样,count += 1 if False else l.append(count+1) 不是 (count += 1) if False else (l.append(count+1) ) 但是 count += (1 if False else l.append(count+1))。从句法上讲,这没问题,但是 append 返回 None,它不能添加到 count,因此出现 TypeError。

关于python - 三元 if-else 语句中的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51342536/

相关文章:

c# - 条件运算符使用错误

c - 使用三元条件运算符和其他两个 int 的值分配 int

python - 如何在 python 中模拟用户并使用 os.system

python - Django 管理失败, Bootstrap "danger"类?

python - 用于更改文本颜色的 RadioButtons 命令 (tkinter)

objective-c - 问号和冒号是什么意思(?: ternary operator) mean in objective-c?

javascript - 简写 if 语句始终返回 'false' 而不是分配的值

python - pyximport 与 cgal 构建错误 : undefined symbol "__gmpq_equal"

python - try 子句中的变量无法在 finally 子句中访问 - python

matlab - 如果在 matlab 中,则进行矢量化