python 显示 `\n` 而不是换行
python displays `\n` instead of breaking a line
我编写了一个函数来创建 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
结果时,我得到的是:
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
,但后来我插入了多个,只是想看看它们是否会显示。
第二个问题是整个东西都有圆括号,这是我不想要的。
我对这两个问题感到困惑,我想出了第二个问题的解决方案:
我在函数末尾有一个逗号。逗号导致函数 return 一个元组,而不是单个字符串。
我删除了逗号:
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
?
写return something,
和return (something,)
一样:它returns一个包含一个元素的元组。当你 print
这个时,它会显示元组的外括号,里面的字符串将被打印为它的源代码表示,即带有转义码和内部引号。
但是,return something
只是returns那个值,然后就可以正常打印了。
这似乎是 Python 中元组的行为。
您可以用这样一个更简单的案例来测试它:
>>> print ("xxx\n\nx",)
('xxx\n\nx',)
似乎 Python 可以帮助您进行调试并在打印时转义字符串中的所有命令序列,以便字符串以与定义相同的方式出现。
虽然这确实让你感到困惑,但有趣的是。 :)
元组可以带括号也可以不带括号,逗号决定类型。
>>> t = 1, 'a', 'abc'
>>> type(t)
<type 'tuple'>
>>> t
(1, 'a', 'abc')
>>>
在上述情况下,您在字符串后添加了一个逗号,python 将其解释为元组。
检查此 link。
>>> t= 'a',
>>> type(t)
<type 'tuple'>
>>> t
('a',)
>>> t = 'a'
>>> type(t)
<type 'str'>
>>> t
'a'
看来这就是元组的行为。打印元组时,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('---')
输出为:
t : ('xxx\nxx',)
element: xxx
xx
repr: 'xxx\nxx'
---
t : ['xxx\nxx']
element: xxx
xx
repr: 'xxx\nxx'
---
因此,元组和列表的行为相同。
当我们有一个字符串时,调用 __repr__()
不会扩展 \n
个字符,而是在其周围加上引号:
s = "xxx\nxx"
print('s :', s)
print('s.__repr__():', s.__repr__())
输出:
s : xxx
xx
s.__repr__(): 'xxx\nxx'
running.t, interjay and Daniel Roseman 在评论中提到了这个元组行为,但在答案中没有提到,这就是我发布这个答案的原因。
我编写了一个函数来创建 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
结果时,我得到的是:
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
,但后来我插入了多个,只是想看看它们是否会显示。
第二个问题是整个东西都有圆括号,这是我不想要的。
我对这两个问题感到困惑,我想出了第二个问题的解决方案:
我在函数末尾有一个逗号。逗号导致函数 return 一个元组,而不是单个字符串。
我删除了逗号:
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
?
写return something,
和return (something,)
一样:它returns一个包含一个元素的元组。当你 print
这个时,它会显示元组的外括号,里面的字符串将被打印为它的源代码表示,即带有转义码和内部引号。
但是,return something
只是returns那个值,然后就可以正常打印了。
这似乎是 Python 中元组的行为。 您可以用这样一个更简单的案例来测试它:
>>> print ("xxx\n\nx",)
('xxx\n\nx',)
似乎 Python 可以帮助您进行调试并在打印时转义字符串中的所有命令序列,以便字符串以与定义相同的方式出现。
虽然这确实让你感到困惑,但有趣的是。 :)
元组可以带括号也可以不带括号,逗号决定类型。
>>> t = 1, 'a', 'abc'
>>> type(t)
<type 'tuple'>
>>> t
(1, 'a', 'abc')
>>>
在上述情况下,您在字符串后添加了一个逗号,python 将其解释为元组。
检查此 link。
>>> t= 'a',
>>> type(t)
<type 'tuple'>
>>> t
('a',)
>>> t = 'a'
>>> type(t)
<type 'str'>
>>> t
'a'
看来这就是元组的行为。打印元组时,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('---')
输出为:
t : ('xxx\nxx',)
element: xxx
xx
repr: 'xxx\nxx'
---
t : ['xxx\nxx']
element: xxx
xx
repr: 'xxx\nxx'
---
因此,元组和列表的行为相同。
当我们有一个字符串时,调用 __repr__()
不会扩展 \n
个字符,而是在其周围加上引号:
s = "xxx\nxx"
print('s :', s)
print('s.__repr__():', s.__repr__())
输出:
s : xxx
xx
s.__repr__(): 'xxx\nxx'
running.t, interjay and Daniel Roseman 在评论中提到了这个元组行为,但在答案中没有提到,这就是我发布这个答案的原因。