简答
如果你问'如何让它工作'..那么一个简单的解决方案是编写一个简单地将列表转换为字符串的函数。
如果你跑
print('\'' + r'\"quote\"' + '\'')
你会看见
'\"quote\"'
如你所愿。现在只需要在列表上应用这个逻辑。所以它会是这样的(我使用的是 python 2.7.14,但我认为它与你的版本相似):
def prettyPrintList(l):
print('[' + ','.join(map(lambda x: '\'' + x + '\'', l)) + ']')
prettyPrintList([r'\"quote\"'])
用python编写它可能有更好的方法,我通常不使用python。
长答案
我想解决问题的根源:“为什么它不起作用?”
在 OO 语言(如 python)中,当您打印一个对象(如列表)时,它实际上隐式调用了一个函数。
在 python 中,该函数是str()。
所以从技术上讲,你正在运行代码
print list.__str()__
该函数定义了您看到的行为。
对于列表,我假设它的功能与我的“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"' ]
如您所见,它实际上取决于核心功能的实现。
您可以保证完全按照您的需要打印的最佳方法是在代码中指定您希望如何“字符串化”它。基本上,.__str__()
以适合您的方式实现该功能。
我希望我回答了您的问题并说服了您解决方案。
如果您有更多意见,请告诉我