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

时间:2015-05-10 10:43:11

标签: python string string-formatting

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

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')"
       ])]

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

3 个答案:

答案 0 :(得分:1)

看看这是否看起来好像以防万一:)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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}而不是两个{}),以便最后一行可读。