简短回答
如果你问“如何让它工作”。。然后一个简单的解决方案是编写一个函数,将列表简单地转换为字符串。在
如果你跑了print('\'' + r'\"quote\"' + '\'')
你会看到的
^{pr2}$
如你所愿。现在只需要在一个列表上应用这个逻辑。因此它将类似于(我使用的是python2.7.14,但我假设它与您的版本类似):def prettyPrintList(l):
print('[' + ','.join(map(lambda x: '\'' + x + '\'', l)) + ']')
prettyPrintList([r'\"quote\"'])
也许有更好的方法用python编写,我通常不使用python。在
冗长的回答
我想谈谈问题的根源:“为什么它不起作用?”在
在面向对象语言(如python)中,当打印对象(如列表)时,它实际上隐式调用函数。在
在python中,这个函数是str()。在
所以从技术上说你是在运行代码print list.__str()__
该函数定义您看到的行为。
对于list,我假设它做的事情与我的“prettyPrint”函数非常相似——它可能会遍历所有元素并对它们调用.__str__(),然后用逗号将它们连接起来,并用括号括起来。在
所以为了理解输出,让我们看一下.__str__(),当我们直接在'\“quote\”上调用它时>>> '\"quote\"'
'"quote"'
>>> '\"quote\"'.__str__()
'"quote"'
>>> r'\"quote\"'.__str__()
'\\"quote\\"'
>>>
如您所见,REPL实际上输出.__str__()的结果。同样,结果将取决于函数的定义。在
python选择了一种奇怪的方式来实现它。在
如果我在JavaScript中执行相同的操作,那么浏览器和节点(在控制台中)之间会产生不同的结果。在浏览器中,它会产生与您想要的结果相似的结果console.log(['\\"item\\"'])
> ["\"item\""]
在控制台里> console.log(['\\"quote\\"'])
[ '\\"quote\\"' ]
undefined
> console.log(['\"quote\"'])
[ '"quote"' ]
所以正如你所看到的,它实际上取决于核心功能的实现。在
你能保证打印出来的东西和你需要的完全一样,最好的方法就是在代码中指定你想如何“stringify”它。基本上,以适合您的方式实现.__str__()函数。在
我希望我回答了你的问题,并让你相信解决办法。
如果你还有什么意见,请告诉我