我以前一直在用C/C++进行编码。
在C++中,以下代码运行良好。它打印了5次Hello。
int t = 5;
while (t--)
{
cout << "Hello";
}
上面的循环工作得很好。当t
变为0时,循环条件将为false,循环将终止。
但当我在Python中尝试类似的东西时:
t = 5
while (t-=1):
print("Hello")
给出了CCD_ 2。
我知道,在python中,我们可以使用1==True和0==False逻辑。
那么我的Python循环中有什么问题?
C(++(与Python不同,它从赋值中返回赋值,因此它们是可以在条件等中使用的有效表达式。在Python中,您不能使用更简单的while t = 1:
,因为赋值t = 1
的值是None
,而不是1
;此外,它在语法上不是一个表达式——这就是为什么你会得到SyntaxError
。
引入海象运营商:=
正是为了提供一种实现这一点的方法;但结果不是惯用的Python。
# Requires Python >= 3.8; not a good example
t = 6 # Because the condition will be false and not print when you reach 0
while t := t-1:
print('Hello')
在某些地方,将赋值作为表达式是可以辩护的,但这并不是一个例子。Python是有意识地设计来避免这种类型的副作用的,这可以说使C代码更紧凑,但更难一目了然,尤其是当您的表达式包含多个赋值时。
在Python中,通常的方法是
for t in range(5):
print('Hello')
或者,如果你真的坚持倒计时,
for t in range(5, 0, -1):
print('Hello')
通常情况下,在Python中,您真的不需要显式循环来多次拥有相同的东西。
print('n'.join(['Hello'] * 5))
或者,如果可以接受空格而不是换行符,则
print(*['Hello'] * 5)
因为t -= 1
不是一个表达式,所以它是一个语句。本质上:
t = t - 1
表达式为t - 1
,语句为t = <some_expression>
while
关键字需要一个表达式,该表达式可以是(1(函数调用,也可以是(2(数学表达式。
所以,写
while t -= 1:
相当于:
while t = t - 1:
因此是语法错误。
(作为对比,C递减算子--
是"具有副作用的表达式"(
使用while
:打印"你好"5次
t = 5
while t:
print("Hello")
t -= 1
打印:
Hello
Hello
Hello
Hello
Hello