【问题标题】:efficient way of writing a python function编写python函数的有效方法
【发布时间】:2019-11-12 10:36:04
【问题描述】:
def getObj(self, x,y,z):

    sheet = self.sheet
    is_flag = sheet[FLAGTYPE]

    if is_flag:
        lines = adlines.objects.filter(
            key="",
            msc_cd=adlines.op,
            tid=x,
            svc_beg_dt__gte=datera.start,
            svc_beg_dt__lte=datera.end
        ).exclude(ind='Y')
    else:
        lines = adlines.objects.filter(
            key="",
            msc_cd=adlines.op,
            pid=x,
            svc_beg_dt__gte=datera.start,
            svc_beg_dt__lte=datera.end
        ).exclude(ind='Y')

以上代码是函数的一部分。 我有一个将其分配给变量的标志,并根据标志条件进行过滤操作。 有没有有效的写法?

【问题讨论】:

  • 它有什么低效的地方?
  • 是的,据我所知,它是有效的,但是有没有其他方法可以像使用 is_flag 使它们更短
  • 我假设您想使用某种三元运算符来减少代码重复?这是可能的,但不是必需的。它是相当清晰的。

标签: python django django-models


【解决方案1】:

我假设您要删除过滤器的重复项,您可以先将它们配置为字典

filter_args = {
    'key': "",
    'msc_cd': adlines.op,
    'svc_beg_dt__gte': datera.start,
    'svc_beg_dt__lte': datera.end
}

if is_flag:
    filter_args['tid'] = x
else:
    filter_args['pid'] = x

lines = adlines.objects.filter(**filter_args).exclude(ind='Y')

【讨论】:

  • 您也可以将 if 语句缩短为 filter_args['tid' if is_flag else 'pid'] = x 但我认为这看起来很难看..
  • @kate - 你原来的 sn-p 里就有,我根本没有改变它的功能
  • 'ind' 值不通过函数参数。所以我们在表级别排除它..
  • @kate - 我不明白你的意思,但这听起来像是一个完全独立的问题,你应该提出一个关于你尝试/研究过的新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多