文章内容

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、非空对象),就直接返回左边的值。

    • 如果 左边的值是假值(比如 None0、空字符串等),就返回右边的值。

  • 所以这里的意思是:

    • 如果 account_balance 已经查到对象,就继续用这个对象。

    • 如果 account_balanceNone(没查到记录),就新建一个 CloudProductAccountBalance 对象并赋值。

  • 等价写法

    if ... else ... 语句写出来就是:

    if account_balance:
        account_balance = account_balance
    else:
        account_balance = CloudProductAccountBalance(user_id=account_funds.user_id, balance=0)

    总结
    这里的 or 是利用 Python 的短路逻辑,起到“如果数据库没查到,就给我一个默认的新对象”的效果。

    分享到:

    发表评论

    评论列表