将详细信息打印到控制台的最佳方法

3

如何在控制台上打印详细信息?我通常使用f-string进行控制台输出,例如print(f"{data=}")非常方便。但是,由于f-string表达式部分不能包含反斜杠,因此我无法使用join语句。

# This does not work
print(f"{'\n'.join(['1', '2', '3'])}")

即使反斜杠起作用,我觉得由于不同类型的引号而变得非常混乱。

我可以想到多种解决方法,但它们并不感觉很干净:

示例代码

data = [["1", "2", "3"], ["cat", "dog"], ["item1", "item2"]]

# Approach 1
print("Current data:\n\t{}".format("\n\t".join(["{} -> {}".format(i, " ".join(data[i])) for i in range(len(data))])))

# Approach 2
print("Current data:\n\t" + "\n\t".join(f"{i} -> " + " ".join(data[i]) for i in range(len(data))))

# Approach 3
s = "Current data:"
for i in range(len(data)):
    tmp = " ".join(data[i])
    s += f"\n\t{i} -> {tmp}"
print(s)

输出

Current data:
        0 -> 1 2 3
        1 -> cat dog
        2 -> item1 item2
Current data:
        0 -> 1 2 3
        1 -> cat dog
        2 -> item1 item2
Current data:
        0 -> 1 2 3
        1 -> cat dog
        2 -> item1 item2

目前我通常尽可能使用f-strings,否则我会使用第一种方法。

这方面有什么最佳实践吗?


1
可以使用os.linesep.join替代'\n'.join吗?至少对于第一个示例是这样。 - Iain Shelvington
1个回答

1
这是一个可能的替代方案:

print(*['Current data:',
        *map(lambda x: f'{x[0]} -> {" ".join(x[1])}', enumerate(data))],
      sep='\n\t')

或者:

print(*['Current data:',
        *map(' -> '.join, zip(map(str, range(len(data))), map(' '.join, data)))],
      sep='\n\t')

输出:

Current data:
    0 -> 1 2 3
    1 -> cat dog
    2 -> item1 item2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接