【发布时间】:2016-07-22 16:13:02
【问题描述】:
我正在处理的 Django 项目中有一个 API,用于向设备发送命令。 API 需要一个 POST 请求,其中包含类似{"command": "activate"} 的数据。几分钟前,我在 API 的视图函数中发现了这段代码
我发现有人(很可能是我自己)犯了一个逻辑错误并将其修复为request.data['command'] is 'activate',但立即意识到 API 确实可以正常工作。就是这个 if 语句评估为 True 并且即使它明确指出 request.data['command'] is not 'activate'
于是我开始调试,最终发现request.data['command'] != 'activate' 按预期返回 False 并破坏了代码,但 request.data['command'] is not 'activate' 返回 True。据我所知,is not 和!= 之间的区别在于is not 比较身份,而!= 比较值。但是,据我所知,文字应该具有相同的身份,无论它们来自哪里。在 ipython 中的快速测试似乎证实了这一点
这到底是怎么回事?为什么它在视图中不起作用?
【问题讨论】:
-
文字无论来自哪里都应该具有相同的标识,这并不完全正确。这严格依赖于实现