我们可以像这样使用 if-else:
statement if condition else statement
但是这里有一些问题,我不明白为什么。
如果我运行
count += 1 if True else l = []
(已经定义了 count),则会引发错误:File "<ipython-input-5-d65dfb3e9f1c>", line 1 count += 1 if True else l = [] ^ SyntaxError: invalid syntax
我们不能在else之后赋值吗?
当我运行
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
,但完全不同的东西。第一个将评估表达式 A
或B
然后返回结果,而后者将只执行其中一个statements A
或 B
。
更清楚的是,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/