首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python显示`\n`,而不是换行

python显示`\n`,而不是换行
EN

Stack Overflow用户
提问于 2019-03-19 22:16:37
回答 4查看 5.3K关注 0票数 19

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

代码语言:javascript
运行
复制
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时,我得到的结果是:

代码语言:javascript
运行
复制
query_values:
('\n("801",\n"printer",\n"barcode printer")\n,\n\n("844",\n"laptop",\n"windows")\n,\n\n("997",\n"printer",\n"barcode printer")\n',)

这一切都在一行之内。显示的不是断行,而是\n

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

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

我对这两个问题感到困惑,我想出了第二个问题的解决方案:

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

我删除了逗号:

代码语言:javascript
运行
复制
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
                      )

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

代码语言:javascript
运行
复制
query_values:

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

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

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

我把逗号放回原处,\n就会显示出来。我删除了逗号,并且我又有了多行。

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

代码语言:javascript
运行
复制
query_values:

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

因此,我的代码工作正常,但我完全搞不懂旧版本代码中显示的\n字符。为什么会发生这种情况?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-03-20 00:14:08

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

我试过这个:

代码语言:javascript
运行
复制
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('---')

输出结果为:

代码语言:javascript
运行
复制
t      : ('xxx\nxx',)
element: xxx
xx
   repr: 'xxx\nxx'
---
t      : ['xxx\nxx']
element: xxx
xx
   repr: 'xxx\nxx'
---

因此,元组和列表的行为是相同的。

当我们有一个字符串时,调用__repr__()不会扩展\n字符,而是用引号括起来:

代码语言:javascript
运行
复制
s = "xxx\nxx"
print('s           :', s)
print('s.__repr__():', s.__repr__())

输出:

代码语言:javascript
运行
复制
s           : xxx
xx
s.__repr__(): 'xxx\nxx'

这种元组行为在running.tinterjayDaniel Roseman的评论中都有提到,但在answers中没有提到,这就是我发布这个答案的原因。

票数 19
EN

Stack Overflow用户

发布于 2019-03-19 22:23:02

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

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

票数 12
EN

Stack Overflow用户

发布于 2019-03-19 22:26:56

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

代码语言:javascript
运行
复制
>>> print ("xxx\n\nx",)
('xxx\n\nx',)

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

它确实把你搞糊涂了,有趣的案子。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55243089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档