有没有办法打破括号内的f弦?

时间:2017-09-29 19:29:09

标签: python python-3.x python-3.6 f-string

例如,如果我有

>>> name = f"{os.path.splitext(os.path.basename('/some/long/path/I/donot/need/to/some/config.bs'))[0]}.yaml"
'config.yaml'

因为实际文本非常少,所以在79个字符之前没有好的地方可以打破这一行。看来你不能这样做:

name = f"{os.path.splitext(os.path.basename(
    '/some/long/path/I/donot/need/to/some/config.bs'))[0]}.yaml"

>>> f"{os.path.splitext(os.path.basename(
  File "<stdin>", line 1
    f"{os.path.splitext(os.path.basename(
                                        ^
SyntaxError: EOL while scanning string literal

我唯一能做的就是拆分命令,例如:

>>> fname = '/some/long/path/I/donot/need/to/some/config.bs'
>>> tempname = os.path.splitext(os.path.basename(
...     fname))[0]
>>> name = f'{tempname}.yaml'
>>> name
'config.yaml'

是否有其他选项来拆分f-string?

1 个答案:

答案 0 :(得分:4)

是的,您仍然可以使用三引号字符串并以您认为最佳的方式将其拆分。

From the PEP on f-strings

  

表达式中的前导和尾随空格被忽略

     

为了便于阅读,忽略表达式中的前导和尾随空格。这是在评估之前将表达式括在括号中的副产品。

因此删除前后的任何空格,括号内的其他空格(例如函数调用)和方形/花括号也因同样的原因没有区别。所以这个:

$myInfoMsg = self::class . ": New User {$user['name']} created";

仍应产生预期结果。以您认为最好的方式格式化它。

虽然有人可以成功地争辩说你可以通过其他几个步骤来减少一切:

name = f"""{
    os.path.splitext(
        os.path.basename('/some/long/path/I/donot/need/to/some/config.bs')
    )[0]}.yaml"""

最终选择是你的。