【问题标题】:Best way to print detailed info to console将详细信息打印到控制台的最佳方式
【发布时间】:2021-11-09 14:29:39
【问题描述】:

将详细信息打印到控制台的最佳方式是什么? 我通常使用 f 字符串作为控制台输出,例如print(f"{data=}") 非常方便。 但是我不能做连接语句,因为 f 字符串表达式部分不能包含反斜杠:

# 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,否则我将使用第一种方法。

这方面的最佳做法是什么?

【问题讨论】:

  • 可以使用os.linesep.join 代替'\n'.join 吗?至少对于第一个例子

标签: python string console output pep


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多