Python中如何用f-string实现类似print的可迭代对象解包?
用f-string实现元组解包输出的简洁方案
我们知道print函数可以直接对元组解包输出,自动去掉括号和逗号:
a = (0, -1, 1) print(*a)
执行后输出:0 -1 1
但直接在f-string中使用{*a}会触发语法错误,之前的写法是通过多次字符串替换来处理:
print(f'{*a,}'.replace(',', '').replace('(', '').replace(')', ''))
其实有更直接高效的方法,利用字符串的join方法结合类型转换,在f-string中直接构造目标输出:
a = (0, -1, 1) print(f'{" ".join(map(str, a))}')
执行后同样输出0 -1 1。
原理很简单:先通过map(str, a)把元组里的每个数字转为字符串类型,再用' '.join()将这些字符串用空格连接成整体,最后嵌入到f-string中即可。如果元组本身存储的就是字符串元素,直接用' '.join(a)即可完成拼接。
需要注意的是,f-string的占位符内部不支持直接使用解包语法*,{*a,}的写法实际是创建了一个包含原元组的新元组(即((0, -1, 1),)),所以才需要额外的替换操作,显然用join的方式更简洁且易读。
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

