在列表理解中编写长if语句的python方法
我是python初学者,希望您能帮助我找到正确编写在列表理解中编写长if语句的python方法,python,python-3.x,if-statement,Python,Python 3.x,If Statement,我是python初学者,希望您能帮助我找到正确编写if语句的方法。这是我的代码: target_dir = Path(__file__).resolve().parents[1] nav_files = [ x for x in target_dir.rglob('conf.yaml') if '.'.join(str(x.parent).replace(str(target_dir), '').lstrip('/').split('/')[:2]) in setting
if
语句的方法。这是我的代码:
target_dir = Path(__file__).resolve().parents[1]
nav_files = [
x
for x in target_dir.rglob('conf.yaml')
if '.'.join(str(x.parent).replace(str(target_dir), '').lstrip('/').split('/')[:2]) in settings.MODULES
]
您可能会看到过长的if
语句。据我所知,有两种方法可以解决这个问题:
nav_文件
准备并使用一些用于
块if
语句(如果可能)最佳做法是什么?谢谢 可以在每条换行之前使用反斜杠将多条物理行合并为一条逻辑行。Python中更常见的做法是在括号内换行;然后Python知道该语句有一个continue,您不需要反斜杠
nav_文件=[
在target_dir.rglob('conf.yaml')中x代表x
如果“.”。加入(
str(x.parent)。替换(
str(target_dir),'').lstrip(
“/”)。在settings.MODULES中拆分(“/”)[:2])
]
您能否澄清if语句应该做什么?这似乎是一个文件路径操作(获取到target\u dir
的相对路径,删除尾随目录,并获取最后两个路径元素?),可能表示得更短。请注意,“如何使内部更具可读性”的一般方法是“不要死记硬背”。具体来说,for循环语句和该条件的实用程序函数可能更具可读性。@MisterMiyagi项目具有模块化结构(base_dir/module/submodule/other_文件),并且有模块列表,其中包含“core.page”等项。在这个if
语句中,我只需要从启用的模块(存在于模块列表中)筛选conf.yaml
文件。因此,我需要准备路径中的module.submodule字符串,以便与模块列表进行比较。因此,基本上您需要最后两个路径元素,用点分隔?就像在/a/b/c/d/e
中变成d.e
?是否有任何路径短于两个元素(在修剪基本元素后),如/a
变成a
?@MisterMiyagi,如我所见,没有,模块有两部分“模块/子模块”,没有“静态”,有“static.page”、“static.widget”等