Python中(course_db = Course(...)).save()报错的原因及替代方案
问题解答
该写法报错的核心原因
Python 和 C++ 对普通赋值操作的定位完全不同:
- C++ 中
=是赋值表达式,执行赋值后会返回被赋值的对象,所以可以嵌套在其他表达式中使用 - Python 中普通的
=是赋值语句,设计上就没有返回值,语法规则里不允许将赋值语句放在括号、函数调用等需要传入表达式的位置。这么设计的初衷是为了避免开发者笔误把==写成=,导致出现难以排查的逻辑错误。
你搜索到的资料大概率混淆了普通赋值语句和Python 3.8版本新增的赋值表达式语法,所以才会让你误以为普通赋值可以这么用。
可用的替代方案
方案1:使用Python 3.8+支持的海象运算符
Python 3.8 新增了海象运算符:=,专门用来实现「赋值同时返回被赋值对象」的需求,完全符合你的预期写法:
(course_db := Course(title='Databases')).save()
方案2:兼容所有Python版本的标准写法
如果你的代码需要兼容Python 3.7及更早版本,直接写两行赋值+调用即可,可读性更高也没有任何兼容问题:
course_db = Course(title='Databases') course_db.save()
内容的提问来源于stack exchange,提问作者AlwaysLearning
相关产品推荐
相关产品推荐

