5

我的代码看起来像:

# -*- coding: utf-8 -*-

print ["asdf", "中文"]
print ["中文"]
print "中文"

Eclipse 控制台中的输出很奇怪:

['asdf', '\xe4\xb8\xad\xe6\x96\x87']
['\xe4\xb8\xad\xe6\x96\x87']
中文

我的第一个问题是:为什么最后一行得到正确的输出,而其他的却没有?

我的第二个问题是:如何纠正错误的(使它们输出真实字符而不是以“x”开头的代码)

感谢你们!!

4

2 回答 2

6

为什么最后一行得到正确的输出,而其他的却没有?

当你print foo的时候,打印出来的是str(foo).

但是,如果foo是 a list,则str(foo)用于repr(bar)每个元素bar,而不是str(bar)

字符串的str是字符串本身;字符串的repr是引号内的字符串,并且已转义。

我如何纠正错误的

如果要打印stra 中每个元素的list,则必须明确执行此操作。例如:

print '[' + ', '.join(["asdf", "中文"]) + ']'

已经有零星的提议来改变这种行为,所以str一个序列会调用str它的成员。PEP 3140是被拒绝的提案。这个 2009 年的帖子解释了拒绝它的设计理由。

但主要是,要么这些不打印相同的东西:

a = 'foo, bar'
b = 'foo'
c = 'bar'
print [a]
print [b, c]

或者,套用 Ned Batchelder:repr总是为极客准备的;str尽可能适用于人类,但打印带有括号和逗号的列表已经适用于极客。

于 2013-07-10T00:42:15.760 回答
1

前两个是使用__repr__字符串的,最后一个是使用__str__方法

你可以使用

print ", ".join(["asdf", "中文"])
于 2013-07-10T00:42:34.577 回答