我的代码看起来是:
# -*- coding: utf-8 -*-
print ["asdf", "中文"]
print ["中文"]
print "中文"Eclipse控制台中的输出非常奇怪:
['asdf', '\xe4\xb8\xad\xe6\x96\x87']
['\xe4\xb8\xad\xe6\x96\x87']
中文我的第一个问题是:为什么最后一行得到正确的输出,而其他行没有得到正确的输出?
我的第二个问题是:如何纠正错误的(使它们输出真正的字符而不是以“x”开头的代码)
谢谢你们!!
发布于 2013-07-10 00:42:15
为什么最后一行得到了正确的输出,而其他行没有得到正确的输出?
当您print foo时,打印出来的是str(foo)。
但是,如果foo是list,则str(foo)对每个元素bar使用repr(bar),而不是str(bar)。
字符串的str是字符串本身;字符串的repr是引号内的字符串,并转义。
如何纠正错误的错误?
如果要打印list中每个元素的list,则必须显式地这样做。例如:
print '[' + ', '.join(["asdf", "中文"]) + ']'有零星的提议来改变这种行为,所以序列上的str在其成员上调用str。佩普3140是被拒绝的提议。这条线从2009年开始解释了拒绝它的设计原理。
但最重要的是,这不是为了让它们打印相同的东西:
a = 'foo, bar'
b = 'foo'
c = 'bar'
print [a]
print [b, c]或者,套用奈德·巴奇尔德的话说:repr总是为极客服务的;str在可能的情况下是针对人类的,但是打印带有括号和逗号的列表已经是给极客的了。
发布于 2013-07-10 00:42:34
前两个是使用字符串的__repr__,最后一个是使用__str__方法。
你可以用
print ", ".join(["asdf", "中文"])https://stackoverflow.com/questions/17560620
复制相似问题