Gra*_*ing 18 python string tuples newline repr
我编写了一个函数来创建VALUES
SQL查询的一部分:
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
),
Run Code Online (Sandbox Code Playgroud)
当我调用此函数和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',)
Run Code Online (Sandbox Code Playgroud)
合而为一。而不是换行,\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
)
Run Code Online (Sandbox Code Playgroud)
并且解决了两个问题。现在的输出是:
query_values:
("801",
"printer",
"barcode printer")
,
("844",
"laptop",
"windows")
,
("997",
"printer",
"barcode printer")
Run Code Online (Sandbox Code Playgroud)
我把逗号放回去,并且\n
显示了。我删除了逗号,并且再次有多行。
我删除了无关的东西\n
,所以现在我得到了想要的:
query_values:
("801","printer","barcode printer"),
("844","laptop","windows"),
("997","printer","barcode printer")
Run Code Online (Sandbox Code Playgroud)
因此,我的代码可以正常工作,但是我\n
对旧版本代码中显示的字符完全感到困惑。为什么会这样呢?
更新:这个问题的几个答案集中在为什么我要一个元组上。那不是我的问题。为什么/n
显示?
Gra*_*ing 19
看来这是元组的行为。当打印元组时,__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('---')
Run Code Online (Sandbox Code Playgroud)
输出为:
t : ('xxx\nxx',)
element: xxx
xx
repr: 'xxx\nxx'
---
t : ['xxx\nxx']
element: xxx
xx
repr: 'xxx\nxx'
---
Run Code Online (Sandbox Code Playgroud)
因此,元组和列表的行为相同。
当我们有一个字符串时,调用__repr__()
不会扩展\n
字符,并在其周围加上引号:
s = "xxx\nxx"
print('s :', s)
print('s.__repr__():', s.__repr__())
Run Code Online (Sandbox Code Playgroud)
输出:
s : xxx
xx
s.__repr__(): 'xxx\nxx'
Run Code Online (Sandbox Code Playgroud)
此元组的行为是在通过评论提到running.t,interjay和丹尼尔·罗斯曼,但不是答案,这就是为什么我张贴这个答案。
int*_*jay 12
编写return something,
与return (something,)
:相同:它返回一个包含一个元素的元组。当您执行print
此操作时,它将显示元组的外部括号,并且内部字符串将作为其源代码表示形式打印,即带有转义代码和内部引号。
但是,return something
只需返回该值即可正常打印。
归档时间: |
|
查看次数: |
1974 次 |
最近记录: |