文章内容
2025/9/30 1:54:27,作 者: 黄兵
Python or 的理解
有这样一段代码:
account_balance = AccountBalance.query.filter_by(user_id=account_funds.user_id).first() account_balance = account_balance or AccountBalance(user_id=account_funds.user_id, balance=0)
这里的 or 用法,是利用了 Python 的布尔运算符的“短路”特性。
运行逻辑分解:
第一行
account_balance = AccountBalance.query.filter_by(user_id=account_funds.user_id).first()
- 去数据库里查是否存在这个用户的账户余额记录。
- 如果找到,就返回一个
CloudProductAccountBalance对象; - 如果没找到,就返回
None。
第二行
account_balance = account_balance or AccountBalance(user_id=account_funds.user_id, balance=0)
在 Python 里,or 会先计算左边:
-
如果 左边的值是真值(非
None、非False、非空对象),就直接返回左边的值。 -
如果 左边的值是假值(比如
None、0、空字符串等),就返回右边的值。
所以这里的意思是:
-
如果
account_balance已经查到对象,就继续用这个对象。 -
如果
account_balance是None(没查到记录),就新建一个CloudProductAccountBalance对象并赋值。
等价写法
用 if ... else ... 语句写出来就是:
if account_balance:
account_balance = account_balance
else:
account_balance = CloudProductAccountBalance(user_id=account_funds.user_id, balance=0)✅ 总结:
这里的 or 是利用 Python 的短路逻辑,起到“如果数据库没查到,就给我一个默认的新对象”的效果。
评论列表