我们可以使用if-else这样:statement if condition else statement但是这里有一些问题我无法理解为什么?
如果我运行count += 1 if True else l = [](已定义计数),则引发错误:
File "<ipython-input-5-d65dfb3e9f1c>", line 1
count += 1 if True else l = []
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)不能在其他地方分配价值吗?
运行时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'
Run Code Online (Sandbox Code Playgroud)而l的结果是[1].
同样的条件,如果我使用if-else块,则没有错误.你能解释一下它的区别吗?
tob*_*s_k 10
"条件表达式" A if C else B不是if/else语句的单行版本if C: A; else: B,而是完全不同的东西.第一个将评估表达式 A或B,然后返回结果,而后者将只执行任的陈述 A或B.
更清楚的count += 1 if True else l = []是,不是 (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 中,三元表达式不能包含它们包含表达式的语句。
在 Python 的官方语法中可以看出,赋值是一个语句,一个方法调用是一个表达式。
在您的示例中,l = []被视为语句,而l.append(...)是表达式。
对于您的第二个错误,list.append返回None,而不是列表。因此,您实际上是在尝试添加None一个整数,这是不允许的,因此TypeError.
最后,请不要使用小写的 L's ( l) 或大写的 o's ( O) 作为变量名。正如PEP 8 中所述,由于它们与 1 和 0 的相似性,这些变量名称可能会非常令人困惑。