Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在列表理解中编写长if语句的python方法_Python_Python 3.x_If Statement - Fatal编程技术网

在列表理解中编写长if语句的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

我是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 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”等