2013-07-10 4 views
3
중국어 문자가 포함 된 목록

내 코드는 다음과 같습니다인쇄 파이썬

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

내 첫 번째 질문은 다음과 같습니다 :

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

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

이클립스 콘솔의 출력이 매우 이상하다 이유를했던 마지막 줄은 올바른 결과를 얻었고 다른 줄은 그렇지 못했습니까?

그리고 내 두 번째 질문은 다음과 같습니다 이 어떻게 잘못된 사람이(그 출력 실제 문자 대신에 "X"로 시작하는 코드를 만들기 위해) 수정합니까?

감사합니다 !!

답변

4

왜 마지막 줄이 올바른 출력을 얻었습니까?

당신 print foo이 인쇄됩니다 무엇 str(foo)입니다

. foolist 경우

그러나 str(foo) 각 요소 bar하지 str(bar)위한 repr(bar)를 이용한다.

문자열의 str은 문자열 자체입니다. 문자열의 repr은 따옴표 안에있는 문자열이며 이스케이프 처리됩니다. 당신이 list의 모든 요소의 str을 인쇄하려면

은 어떻게 당신이 명시 적으로 할 필요가 잘못된 것

를 해결 않습니다. 예를 들어 시퀀스는 회원에 str를 호출에

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

가 있었다 산발적 제안, 그래서 str을이 동작을 변경합니다. PEP 3140은 거부 된 제안입니다. This thread from 2009은이를 거부 한 설계 이유를 설명합니다.

그러나 주로, 그것은 하나 때문에이 같은 일이 인쇄되지 않습니다이다 : 네드 BATCHELDER 지나친 의역,

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

을 또는 : repr은 괴짜를 위해 항상; str은 가능하면 인간을위한 것이지만 괄호와 쉼표가있는 인쇄 목록은 이미 괴짜를위한 것입니다.

+1

, 체크 아웃 STR과에 repr의 차이점이 매우 자세한 설명을 사용할 수있는 __str__ 방법

을 사용하고 있습니다 http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python – alejandro

1

처음 두 문자열의 __repr__를 사용하고, 마지막 하나는 또한

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