python显示“\n”,而不是断开lin

2024-05-10 03:48:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个函数来创建SQL查询的VALUES部分:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      ),

当我调用这个函数并且print得到的结果是:

^{pr2}$

一字排开。将显示\n,而不是换行。在

最初我有一个\n,但后来我插入了多个,只是想看看它们是否会显示出来。在

第二个问题是整件事都有括号,这是我不想要的。在

我想了两个问题的解决办法:

函数末尾有个逗号。逗号导致函数返回元组,而不是单个字符串。在

我去掉了逗号:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      )

这就解决了这两个问题。现在的输出是:

query_values:

("801",
"printer",
"barcode printer")
,

("844",
"laptop",
"windows")
,

("997",
"printer",
"barcode printer")

我把逗号放回原处,显示了\n。我去掉了逗号,我又有多行了。在

我删除了无关的\n,所以现在我得到了我想要的:

query_values:

("801","printer","barcode printer"),
("844","laptop","windows"),
("997","printer","barcode printer")

所以,我的代码可以正常工作,但是我对旧版本代码中显示的\n字符感到完全困惑。为什么会这样?在

更新: 这个问题的几个答案集中在我为什么要得到元组。这不是我的问题。为什么显示/n?在


Tags: 函数informatfordatavaluedefquery
3条回答

这似乎就是Python中元组的行为。 你可以用一个更简单的例子来测试这一点:

>>> print ("xxx\n\nx",)
('xxx\n\nx',)

似乎Python可以帮助您调试并在打印时转义字符串中的所有命令序列,以便字符串的显示方式与它们的定义方式相同。在

但这确实让你困惑,有趣的是。:)

这似乎是元组的行为。打印元组时,print对每个元素调用__repr()__。列表也是如此。在

我试过了:

tup = "xxx\nxx",
lst =["xxx\nxx"]
for t in tup,lst:
    print('t      :', t)
    for s in t:
        print('element:',s)
        print('   repr:',s.__repr__())
    print('---')

输出是:

^{pr2}$

所以,元组和列表的行为是一样的。在

当我们有一个字符串时,调用__repr__()不会扩展\n字符,而是在其周围加上引号:

s = "xxx\nxx"
print('s           :', s)
print('s.__repr__():', s.__repr__())

输出:

s           : xxx
xx
s.__repr__(): 'xxx\nxx'

这个元组行为是由running.tinterjay和{a3}在评论中提到的,但在答案中没有提到,这就是我发布这个答案的原因。在

写入return something,return (something,)相同:它返回一个包含一个元素的元组。当您print这样做时,它将显示元组的外圆括号,内部的字符串将作为其源代码表示形式打印出来,即使用转义码和内引号。在

但是,return something只返回该值,然后可以正常打印。在

相关问题 更多 >