我的代码如下:
# -*- coding: utf-8 -*-
print ["asdf", "中文"]
print ["中文"]
print "中文"
Eclipse控制台中的输出非常奇怪:
['asdf', '\xe4\xb8\xad\xe6\x96\x87']
['\xe4\xb8\xad\xe6\x96\x87']
中文
我的第一个问题是:为什么最后一行得到正确的输出,其他的没有?
我的第二个问题是:如何更正错误(使其输出真实字符而不是以“x”开头的代码)? < / p>
谢谢你们!!
答案 0 :(得分:6)
为什么最后一行得到正确的输出,其他的没有?
当您print foo
时,打印出的内容为str(foo)
。
但是,如果foo
是list
,则str(foo)
会为每个元素repr(bar)
使用bar
,而不是str(bar)
。
字符串的str
是字符串本身;字符串的repr
是引号内的字符串,并已转义。
如何纠正错误的
如果要打印str
中每个元素的list
,则必须明确地执行此操作。例如:
print '[' + ', '.join(["asdf", "中文"]) + ']'
有一些零星的提议要更改此行为,因此序列上的str
会在其成员上调用str
。 PEP 3140是被拒绝的提案。 This thread from 2009解释了拒绝它背后的设计理由。
但主要是,要么这些不打印相同的东西:
a = 'foo, bar'
b = 'foo'
c = 'bar'
print [a]
print [b, c]
或者,解释Ned Batchelder:repr
总是为极客; str
尽可能用于人类,但是用括号和逗号打印列表已经是极客了。
答案 1 :(得分:1)
前两个使用__repr__
字符串,最后一个使用__str__
方法
您可以使用
print ", ".join(["asdf", "中文"])