답변:
>>> x = 'foo'
>>> x
'foo'
따라서 이름 x
은 'foo'
문자열에 첨부됩니다 . 예를 들어 repr(x)
통역사가 'foo'
대신 에을 넣은 x
다음을 호출합니다 repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
실제로의 매직 메소드 __repr__
를 호출하여에 할당 된 값의 표현이 포함 된 문자열x
을 제공합니다 . 그래서 반환 문자열 내부 의 결과 . 아이디어는 인터프리터에 입력하고에 인수로 전송 된 것과 동일한 값을 얻을 수있는 일련의 기호가 포함 된 문자열을 제공하는 것 입니다.'foo'
x
'foo'
""
"'foo'"
repr
repr
>>> eval("'foo'")
'foo'
를 호출 하면 인터프리터에 eval("'foo'")
입력하는 것과 같습니다 'foo'
. ""
인터프리터에 외부 문자열의 내용을 직접 입력하기 때문 입니다.
>>> eval('foo')
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eval('foo')
File "<string>", line 1, in <module>
NameError: name 'foo' is not defined
를 호출 하면 인터프리터에 eval('foo')
입력하는 것과 같습니다 foo
. 그러나 foo
사용 가능한 변수 가 없으며 예외가 발생합니다.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str
는 객체의 문자열 표현 일 뿐이므로 ( x
변수는 참조 'foo'
)이 함수는 문자열을 반환합니다.
>>> str(5)
'5'
정수의 문자열 표현은 5
입니다 '5'
.
>>> str('foo')
'foo'
문자열의 문자열 표현은 'foo'
동일한 문자열 'foo'
입니다.
대화 형 통역사에 대한 피드백 repr
도 사용 됩니다. 식을 입력하면 (있는 그대로 expr
) 인터프리터는 기본적으로 수행 result = expr; if result is not None: print repr(result)
합니다. 귀하의 예제에서 두 번째 라인은 그래서 되는 문자열을 포맷 foo
표현으로 당신이 원하는 ( 'foo'
). 그리고 인터프리터는 생성 repr
의 esentation 그 따옴표와 함께 당신을 떠날.
% r을 큰 따옴표와 작은 따옴표 이스케이프와 결합하여 인쇄 할 때 왜 .py 파일에 쓰는 방식으로 인쇄하지만 원하는 방식으로 인쇄하지 않습니까?
나는 당신이 여기서 무엇을 요구하는지 잘 모르겠습니다. 텍스트 는을 single ' and double " quotes
통과 할 때 repr
한 종류의 따옴표에 대한 이스케이프를 포함합니다. 물론 그렇지 않으면 파이썬 규칙에 의한 유효한 문자열 리터럴이 아닙니다. 바로 전화로 요청한 것입니다 repr
.
또한 eval(repr(x)) == x
유추는 문자 그대로의 의미가 아닙니다. 근사치이며 대부분의 내장 유형에 적용되지만 가장 중요한 것은 repr
출력 을 보면 유형과 논리적 "값"에 대해 상당히 잘 알고 있다는 것입니다 .
repr
전달 eval
하거나 소스 코드에 붙여 넣을 수 있거나 시도 할 때 SyntaxError를 발생시키는 것이어야합니다 (보통 에 <…>
의해 생성 된 스타일 object.__repr__
). 점차적으로 수년에 걸쳐 내려 톤, 2.7 및 3.x로는 "많은 종류의"다만 사실 및 예외 (예를 들면 ,,도 다음 stdlib에가있는 한 그 namedtuple
지역으로 만들어 유형은 당신에게 줄 것이다 repr
당신은 '수 t eval
), 그러나 그것은 최초의 아이디어였습니다.