【问题标题】:Running function that gives strings with "\t" looks different each time运行带有“\t”的字符串的函数每次看起来都不一样
【发布时间】:2016-12-09 13:27:34
【问题描述】:

我有一个函数,它将为我提供最外层的值 (key_n) 和最内层的值,附加到单个字符串,然后将其附加到包含所有单个字符串组合的字符串(希望这是有道理的) .

big_milon = {'key_1' : {'{key1':'dasdadsad', 'key2': 'hat', 'key3':'cat'},
         'key_2' : {'key1':'fat', 'key2': 'pat','key3':'lat'}}

def string_getter():
    prop_string = ''
    full_list = ''
    for i,j in big_milon.items():
        prop_list = []
        itemcode = i
        prop = list(j.values())
        for l in range(len(prop)):
            prop_string =  prop_string +'\t'+ "{" + prop[l] + "}"
        full_list = full_list + itemcode + prop_string + '\n'
        prop_string = ''
    return full_list

print(string_getter())

它工作正常,只是有时,它看起来不像值之间有一个选项卡,而是看起来像两个选项卡或没有选项卡

例如

print(string_getter())

【问题讨论】:

  • 所以你不喜欢标签的打印方式,我们可以忽略所有代码?你希望它看起来如何? tabstop=4 看起来是正确的。
  • 这不是错误 - 这是选项卡的预期行为(将光标移动到 N 的下一个乘法)。如果您想要一致的制表,请使用字符串格式选项或专用库,例如tabulate.
  • @ŁukaszRogalski 是对的,但需要计算每个值的大小,以免达到初始偏移值。

标签: python


【解决方案1】:

\t 不是用于间距,而是用于制表。 \t(或tabulation)默认跳到下一列的 8 倍数...(实际上是 + 1,因为我们从 1 开始计数)。因此,如果您在第 1-8 列,\t 将跳到第 9 列。如果您在 9-16,它将跳到第 17 列,依此类推。

至少,这是旧的含义 - 来自机械打字机和电传打字机。 (即使有一些余地:一些机械打字机允许设置选项卡列)

点是空格,箭头是制表符的结果,制表符大小设置为8

现代计算机和编辑器允许重新定义选项卡大小 - 通常在首选项中。通常它们还允许自动将制表符 (\t) 更改为空格,反之亦然。

通常,这使标签的使用变成了一场噩梦。您可以使用选项卡(例如程序)编写文本,但如果您将其发送给某人,他/她将看到不同的文本。以下是一些由选项卡和不同设置分隔的“单词”示例:

标签大小设置为 8

标签大小设置为 2

标签大小设置为 4

use of \t as a data separator 是个例外(或多或少就像你正在做的那样)。输出中仍有一些顺序度量,除非某些单词超过 8 个字符。

另一方面,像 Python 这样依赖空格来格式化代码的语言尤其受此影响,recommend not changing the tab size from 8。而且 Python 3 显然甚至不允许混合制表符和空格以避免更多混乱。

更糟糕的是,在某些情况下,选项卡还有其他含义:例如在 stackoverflow.com 中,选项卡会更改“区域”。如果我现在按 Tab,我将登陆屏幕的其他部分。 Here 是计算机使用中标签的一些使用指南。

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 2021-12-04
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2017-10-25
    • 1970-01-01
    • 2012-11-28
    相关资源
    最近更新 更多