python - 为什么 Python 显示错误 : can't assign to operator?

标签 python

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(不是在同一行中的两者)分配新值时,我没有得到任何错误,但是当我使用“和”(如上述情况)或“,”时,我得到了这样的错误。

我在互联网上搜索了“无法分配给运算符(operator)”错误,但发现它们与我的案例无关。我想知道为什么上面的代码在遵循赋值规则时会出错。

最佳答案

我们都知道只有表达式和表达式是有效的。所以这里的重点是,在Python中,assignment只是一个statement,而不是expression。在C中,a = 3赋值表达式a = 3 && b = 4是有效的。但是,这在 Python 中是无效的。

并且Python在3.8中将有自己的赋值表达式: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

关于python - 为什么 Python 显示错误 : can't assign to operator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57637216/

相关文章:

python - 如果您是《美丽汤》中的 sibling ,则无法找到全部

Python从另一个包获取模块引用,知道包和模块名称

python - 对回调之间的项目加载器进行故障排除

python - 排序字符串列表时的问题

python - 如何使用 sklearn 在 Python 中将 N*M 矩阵居中

python - PCA如何在测试集上进行拟合变换

python - 如何使用 opencv 通过 ssh 访问 jetson tx2 摄像头

java - 使用socket连接PC的问题

python - 在python数据帧中的每列的最大值之前找到一个值的索引

python - 如何为flask应用程序设置带有文本和图像的html?