python编程输出汉字_在Python中打印包含中文字符的列表

1586010002-jmsa.png

My code looks like :

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

print ["asdf", "中文"]

print ["中文"]

print "中文"

The output in the Eclipse console is very strange:

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

['\xe4\xb8\xad\xe6\x96\x87']

中文

My first question is: why did the last line get the correct output, and the others didn't?

And my second question is: how do I correct the wrong ones (to make them output real characters instead of the code that begins with "x") ?

Thank you guys!!

解决方案why did the last line get the correct output, and the others didn't?

When you print foo, what gets printed out is str(foo).

However, if foo is a list, str(foo) uses repr(bar) for each element bar, not str(bar).

The str of a string is the string itself; the repr of a string is the string inside quotes, and escaped.

how do I correct the wrong ones

If you want to print the str of every element in a list, you have to do that explicitly. For example:

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

There have been sporadic proposals to change this behavior, so str on a sequence calls str on its members. PEP 3140 is the rejected proposal. This thread from 2009 explains the design rationale behind rejecting it.

But primarily, it's either so these don't print the same thing:

a = 'foo, bar'

b = 'foo'

c = 'bar'

print [a]

print [b, c]

Or, paraphrasing Ned Batchelder: repr is always for geeks; str is for humans when possible, but printing lists with their brackets and commas is already for geeks.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值