从两个位置之一选择数据的pythonic方法是什么?

从两个位置之一选择数据的pythonic方法是什么?,python,styles,readability,Python,Styles,Readability,我正在对另一个应用程序中的api端点进行向后不兼容的更改,该应用程序是我从客户端应用程序(此代码所在的位置)调用的。我需要在一段时间内支持it处理前一个案例(数据位于“分类账”级别)和新案例(数据位于“概要”分类账) 下面的代码可以从任何一个地方抓取它,但我有一种唠叨的感觉,必须有一种更具python风格的方法来做到这一点。有什么想法吗 class Profile(object): @property def account_owner(self):

我正在对另一个应用程序中的api端点进行向后不兼容的更改,该应用程序是我从客户端应用程序(此代码所在的位置)调用的。我需要在一段时间内支持it处理前一个案例(数据位于“分类账”级别)和新案例(数据位于“概要”分类账)

下面的代码可以从任何一个地方抓取它,但我有一种唠叨的感觉,必须有一种更具python风格的方法来做到这一点。有什么想法吗

class Profile(object):

    @property
        def account_owner(self):
            owner_data_from_ledger = self.account.ledger.data.get('owner', None)
            owner_data_from_profile = self.data.get('owner', None)

            owner_data = owner_data_from_ledger if owner_data_from_ledger else owner_data_from_profile

            if owner_data:
                return Human(owner_data)
            return None
而不是

owner_data = owner_data_from_ledger if owner_data_from_ledger else owner_data_from_profile
您可以编写以下等效内容:

owner_data = owner_data_from_ledger or owner_data_from_profile
或者缩短整个过程:

owner_data_ = self.account.ledger.data.get('owner',
                  self.data.get('owner', None))
您也可以省略上面末尾的
None
,因为这是该参数的默认值。

而不是

owner_data = owner_data_from_ledger if owner_data_from_ledger else owner_data_from_profile
您可以编写以下等效内容:

owner_data = owner_data_from_ledger or owner_data_from_profile
或者缩短整个过程:

owner_data_ = self.account.ledger.data.get('owner',
                  self.data.get('owner', None))

你也可以省去上面末尾的
None
,因为这是该参数的默认值。

你希望在代码中改进什么?是什么让你希望它被更改?@MooingRawr我认为没有任何“错误”“有了它,如果可能的话,我只希望它更漂亮:)我相信你的代码是如此美丽。它是可读的,这是仅次于工作的最重要的事情,美在旁观者的眼中。你希望在代码中改进什么?是什么让你想改变它?@moonigrawr我不认为它有什么“错误”,我只是希望它更漂亮,如果可能的话:)我相信你的代码是如此美丽。它是可读的,这是仅次于工作的最重要的事情,美丽在旁观者的眼里。
的问题是,如果来自分类账的
所有者数据
为0,则它将抛出默认值。如果不需要0,那么这就不是问题。我想说的是,虽然
是一个很好的技巧,但它需要小心使用,因为
[],(),{},,,None,0
都会触发它。@moingrawr是的,但这正是当前代码的功能。很公平,我只是想也许应该提到它,以防万一将来其中一个可能会引发问题。@Mooningrawr感谢您指出这一点,但我不希望这里有任何我不想忽略的错误值。
的问题是,如果
owner\u data\u from\u ledger
为0,它将抛出默认值。如果不需要0,那么这就不是问题。我想说的是,虽然
是一个很好的技巧,但它需要小心使用,因为
[],(),{},,,None,0
都会触发它。@moingrawr是的,但这正是当前代码的功能。很公平,我只是想也许应该提到它,以防万一将来其中一个可能会引发问题。@Mooningrawr谢谢你指出这一点,但我不希望这里有任何我不想忽视的错误值。