说我有一个功能
def foo(): return [1, 2, 3]
我想将函数的结果插入到字符串中以获取"001 002 003"
. 我试过这个:
f"{*foo():03d 03d 03d}"
但它产生了SyntaxError: can't use starred expression here
。我可以使用 f 字符串来执行此操作吗?
说我有一个功能
def foo(): return [1, 2, 3]
我想将函数的结果插入到字符串中以获取"001 002 003"
. 我试过这个:
f"{*foo():03d 03d 03d}"
但它产生了SyntaxError: can't use starred expression here
。我可以使用 f 字符串来执行此操作吗?
这是你想要的?
str_repr = ' '.join(map('{:03d}'.format, foo()))
print(str_repr) # prints: 001 002 003
也许这个解决方案最好的一点是它适用于任何列表长度,并且只需最少的调整,您也可以更改输出格式。
星号表达式只允许在少数特定上下文中使用,例如函数调用、列表/元组/集合文字等。显然,f-string 占位符不是其中之一。您可以单独格式化每个元素并加入字符串,例如:
lst = foo()
s = ' '.join(f'{x:03d}' for x in lst) # '001 002 003'
通常,要格式化多个值,您必须为每个值使用单独的占位符。
运算符(存在类似的*
规则**
)只能在内部使用:
foo(*bar)
['foo', *bar]
foo, *bar = range(10)
它不是表达式,因此不能在 f 字符串的大括号内使用。
您也可以改用 zfill 方法:
s_repr=" ".join([str(x).zfill(3) for x in foo()]) #not very PEP8 =S
对于列表,f-strings 似乎并没有给没有它们的情况增加太多。一个替代的、稍微简单的、不带f 字符串和不带 的解决方案.join
,适用于任何列表长度,如下所示
a = foo()
str_repr = ("{:03d} "*len(a)).format(*a)
print(str_repr) # prints: 001 002 003