我已经编写了一个小辅助函数,用于检查导航项目是否处于活动状态。代码按照我的预期工作,但它看起来有点嵌套。有人知道如何简化它吗?
def url_name_active(view_name, name, exact=True, exclude=None):
exclude_names = exclude.split(',') if exclude else None
if exclude:
for exclude_name in exclude_names:
if exclude_name in view_name:
return None
if exact and name == view_name or \
not exact and name in view_name:
return 'active'
发布于 2018-07-23 00:22:45
根据您注意行的时长,第一个条件可以简化为未嵌套的
if exclude and any(exclude_name in view_name for exclude_name in exclude.split(',')):
return None
整个方法可以归结为(或多或少不可读的)两行代码
if not (exclude and any(exclude_name in view_name for exclude_name)) and (exact and name == view_name or not exact and name in view_name):
return 'active'
您提到您最终想要检查某个东西是否是'active'
。根据上面的观察,该函数在以下情况下返回'active'
not (exclude and any(exclude_name in view_name for exclude_name)) and (exact and name == view_name or not exact and name in view_name)
因此,如果您只关心该表达式的真值,您可以简单地
return not (exclude and any(exclude_name in view_name for exclude_name)) and (exact and name == view_name or not exact and name in view_name)
并且没有任何条件句。
https://stackoverflow.com/questions/51466996
复制相似问题