无法理解为什么字母u前缀我的raw_input()输出

时间:2013-09-28 07:01:35

标签: python unicode raw-input

我目前正在学习Python,并编写了一个程序来试验该语言。但是,每当我使用它时,输出总是有一个字母" u"在某处。我使用Pyscripter作为我的IDE。

这是我的代码:

print "whats your name"
age = raw_input()
print "Alright, so %r, I just realized what percent-r does actually or is meant for" % (age)
print "What next ur age",
age1 = raw_input()
print "you entered %r " % (age1)

当我运行它时,我看到这样的事情:

>>> Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32.

>>> whats your name (i typed kk)

>>> Alright, so u'kk', i just realized what percent-r does actually or is meant for

>>> what next ur age (i typed ll)

>>> you entered u'll' 

为什么输出中会出现一个随机的u字符,而不仅仅是我想要的字符串?

1 个答案:

答案 0 :(得分:6)

问题在于你的字符串插值。

在您的代码中,您使用的内容如下:

print "Your name is %r" % name

相反,您要么使用:

print "Your name is %s" % name

...这使得Python手动将name视为字符串,或使用:

print "Your name is {0}".format(name)

...这是更新,更首选的方式,使用起来不那么挑剔。


以下是发生了什么的细分。当您使用raw_input()时,Python将返回一种称为 unicode string 的特殊字符串。 Unicode字符串的特殊之处在于它们可以表示普通字符串不能包含的各种字符,例如中文字符。普通字符串通常只能使用键盘上显示的字符。

现在,在Python 2.x中,您可以通过执行以下操作来指示字符串是unicode:

my_str = u"汉字/漢字"

请注意,该字符串的前缀是“u”。

当您使用%r插值指示符时,您告诉Python使用您的字符串,对变量使用repr,并将其替换为原始字符串。如果您执行repr(my_str),则会返回u"汉字/漢字"

相反,如果您使用%s,那么Python将对变量使用str。如果您执行str(my_str),则会返回"汉字/漢字"(某种程度)。

Unicode可能是一件很难理解的事情,特别是在Python中。如果您有兴趣,这个presentation将更深入地了解unicode究竟是什么,以及它在Python中的使用方式。