繁体   English   中英

Python:优雅的多行字符串格式

[英]Python: elegant multi-line string formatting

我正在使用将查询字符串作为__getitem__()方法的key参数的数据库接口。 对于不是很可读的复杂查询:

e = db["(col1 in ['ABC', 'DEF', 'GHI']) & ((col2 != {}) & (col3 != {})) & (col4 == 'something')".format(-some_value-1, -another_value-1)]

目前,我正在使用以下内容:

e = db[" & ".join([
       "(col1 in ['ABC', 'DEF', 'GHI'])",
       "((col2 != {})".format(-some_value-1), 
       " (col3 != {}))".format(-another_value-1), 
       "(col4 == 'something')"
       ])]

我正在寻找一种格式化这种多行字符串的更优雅(阅读:更容易阅读)的方法。 有什么建议么?

我认为这更具可读性。

e = db["(col1 in ['ABC', 'DEF', 'GHI']) & " +
       "((col2 != {}) & ".format(-some_value-1) +
       "(col3 != {})) & ".format(-another_value-1) +
       "(col4 == 'something')"]

看看这是否连连看以防万一:)

e = db[
        """
        (col1 in ['ABC', 'DEF', 'GHI'])
        & ((col2 != {}) & (col3 != {}))
        & (col4 == 'something')
        """.format(-some_value-1, -another_value-1)
    ]
e = db["(col1 in ['ABC', 'DEF', 'GHI'])" +
       "& ((col2 != {}) & (col3 != {}))".format(-some_value-1, -another_value-1) +
       "& (col4 == 'something')"]
db[" & ".join(("(col1 in ['ABC', 'DEF', 'GHI'])",
               "((col2 != {col2_neq})",
               "(col3 != {col3_neq}))",
               "(col4 == 'something')"
              )).format(col2_neq=-some_value-1, col3_neq=-another_value-1)]

这类似于您的解决方案,但在两个方面有所不同:

  1. format在最后,因此更容易阅读前四行而不会中断。
  2. 我使用命名替换( {col2_neq}{col3_neq}而不是两个{} )来使最后一行可读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM