我编写了一个函数来创建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
得到的结果是:
一字排开。将显示\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
?在
这似乎就是Python中元组的行为。 你可以用一个更简单的例子来测试这一点:
似乎Python可以帮助您调试并在打印时转义字符串中的所有命令序列,以便字符串的显示方式与它们的定义方式相同。在
但这确实让你困惑,有趣的是。:)
这似乎是元组的行为。打印元组时,print对每个元素调用
__repr()__
。列表也是如此。在我试过了:
输出是:
^{pr2}$所以,元组和列表的行为是一样的。在
当我们有一个字符串时,调用
__repr__()
不会扩展\n
字符,而是在其周围加上引号:输出:
这个元组行为是由running.t、interjay和{a3}在评论中提到的,但在答案中没有提到,这就是我发布这个答案的原因。在
写入
return something,
与return (something,)
相同:它返回一个包含一个元素的元组。当您print
这样做时,它将显示元组的外圆括号,内部的字符串将作为其源代码表示形式打印出来,即使用转义码和内引号。在但是,
return something
只返回该值,然后可以正常打印。在相关问题 更多 >
编程相关推荐