from datetime import datetime
now = datetime.now()
q = int(now.strftime('%I'))
w = int(now.strftime('%M'))
def correct_time(delta):
if w < (120 - delta):
Q = q + 1 and W = w + (delta - 60)
else:
Q = q + 2 and W = w + (delta - 120)
return Q, W
correct_time(45)
#gives error - SyntaxError: can't assign to operator
在上面的代码中,我试图为q和W分别分配q和w的新值。当我仅尝试将新值分配给Q或W(不在同一行中都分配给这两个值)时,我没有收到错误,但是当我使用'and'(如上述情况)或'时,却收到了这样的错误。
我在互联网上搜索了“无法分配给操作员”错误,但发现它们与我的案子无关。我想知道为什么上面的代码遵循分配规则时会显示错误。
答案 0 :(得分:2)
我们都知道只有expression and expression
是有效的。因此,这里的意思是在Python中,assignment
只是statement
,而不是expression
。在C
中,a = 3
是assignment expression
,而a = 3 && b = 4
是有效的。但是,这在Python中无效。
Python在3.8中将有自己的assignment expression
:PEP 572 -- Assignment Expressions | Python.org
在Python3.8中,您将能够执行以下操作:
# This block code only works with Python3.8+
from datetime import datetime
now = datetime.now()
q = int(now.strftime('%I'))
w = int(now.strftime('%M'))
def correct_time(delta):
if w < (120 - delta):
(Q := q + 1) and (W := w + (delta - 60))
else:
(Q := q + 2) and (W := w + (delta - 120))
return Q, W
correct_time(45)
但是,这不是必需的,因为您可以在Python中执行以下操作:
a, b = 1, 2
等于
a = 1
b = 2
答案 1 :(得分:1)
您的代码应为:
def correct_time(delta):
if w < (120 - delta):
Q = q + 1
W = w + (delta - 60)
else:
Q = q + 2
W = w + (delta - 120)
return Q, W
在类似a = 1 and b = 2
的表达式中,Python首先会尝试将值2
分配给a and b
,这是不可能的,并且会产生错误SyntaxError: can't assign to operator
。您将得到与a = 1 = 2
类似的东西:在这里,尝试将2
分配给1
会产生SyntaxError: can't assign to literal
。
答案 2 :(得分:0)
您要查找的是以下语法:
def correct_time(delta):
if w < (120 - delta):
Q, W = q + 1, w + (delta - 60)
else:
Q, W = q + 2, w + (delta - 120)
return Q, W
在您的情况下,它不起作用,因为右手应该是表情,但它是
expression
和statement
(由于分配)。