【问题标题】:Formatted string literals in Python 3.6 with tuplesPython 3.6 中带元组的格式化字符串文字
【发布时间】:2016-12-10 08:57:52
【问题描述】:

有了str.format(),我可以使用元组来访问参数:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')

'a, b, c'

>>> t = ('a', 'b', 'c')
>>> '{0}, {1}, {2}'.format(*t)

'a, b, c'

但是对于以'f'(f-strings)为前缀的新格式化字符串文字,我该如何使用元组?

f'{0}, {1}, {2}'.(*t)  # doesn't work

【问题讨论】:

  • 你所说的是什么意思,但是有了新的以'f'为前缀的格式化字符串文字,如何使用元组?同样在您的第二个示例中,您需要解压缩元组。
  • f-strings 的使用很大程度上取决于特定的用例。给我们一个实际的例子来说明你正在尝试做什么,因为当前的问题最好在 3.6 和 pre-3.6 中使用 ', '.join(t) 来解决
  • '...'.format('a', 'b', 'c') 是一种方法调用,您使用 3 个参数调用该方法。在第一个示例中,您没有传入元组。在第二个示例中,您使用的是 *args 调用语法; str.format() 仍然接收 3 个单独的参数,并且不知道您使用元组来提供这些参数。
  • @Kasramvd 我的意思是 f'{0}, {1}, {2}'.(*t) 不起作用

标签: python python-3.x tuples string-formatting python-3.6


【解决方案1】:

您的第一个 str.format() 调用是一个带有 3 个参数的常规方法调用,其中不涉及元组。您的第二次调用使用* splat 调用语法; str.format() 调用接收 3 个单独的单独参数,它不关心那些来自元组。

使用f 格式化字符串不使用方法调用,因此您不能使用任何一种技术。 f'..' 格式化字符串中的每个槽都作为正则 Python 表达式执行。

您必须直接从元组中提取您的值:

f'{t[0]}, {t[1]}, {t[2]}'

或首先将您的元组扩展为新的局部变量:

a, b, c = t
f'{a}, {b}, {c}'

或者干脆继续使用str.format()。您没有必须使用f'..' 格式化字符串,这是语言的新的附加功能,而不是str.format() 的替代品。

来自PEP 498 -- Literal String Interpolation

本 PEP 不建议删除或弃用任何现有的字符串格式化机制。

【讨论】:

  • f'Values: {str(t)[1:-2]}'ftw。不,但说真的,根据用例,新方法可能会从无处冒出来。我认为这个问题不能太笼统地回答
  • str.format() 在 Python 3.6 中不会被弃用?
  • 不,我很确定它在 Python 3 期间永远不会消失。@Trimax
  • @Trimax:不,一点也不。格式化字符串是一个附加功能,而不是替代品。
  • @MarkusMeskanen:这仍然包括引号。为什么不', '.join(t)
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 2018-01-03
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 2019-05-09
相关资源
最近更新 更多