파이썬에서 repr () 함수 이해


152

repr(): 객체의 평가 가능한 문자열 표현 ( "eval ()"가능), 파이썬 객체로 평가되는 문자열 표현

다시 말해:

>>> x = 'foo'
>>> repr(x)
"'foo'"

질문 :

  1. 내가 할 때 왜 큰 따옴표를 얻 repr(x)습니까? (나는 할 때 그들을 얻지 못합니다 str(x))
  2. 내가 어떤 객체인지 x 'foo'하지 eval("'foo'")않고 왜 내가 얻을 수 있습니까?

답변:


166
>>> 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'"reprrepr

>>> 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 기능을 사용해야 할 경우 사용 사례를 알려주십시오. 나는 그것을 이해할 수 없다
gaurav parashar

14

대화 형 통역사에 대한 피드백 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출력 을 보면 유형과 논리적 "값"에 대해 상당히 잘 알고 있다는 것입니다 .


2
원래 실제로 문자 그대로의 의미 였습니다 . 모든 값 은 동일한 값을 생성하기 위해 repr전달 eval하거나 소스 코드에 붙여 넣을 수 있거나 시도 할 때 SyntaxError를 발생시키는 것이어야합니다 (보통 에 <…>의해 생성 된 스타일 object.__repr__). 점차적으로 수년에 걸쳐 내려 톤, 2.7 및 3.x로는 "많은 종류의"다만 사실 및 예외 (예를 들면 ,,도 다음 stdlib에가있는 한 그 namedtuple지역으로 만들어 유형은 당신에게 줄 것이다 repr당신은 '수 t eval), 그러나 그것은 최초의 아이디어였습니다.
abarnert

7

str ()은 최종 사용자를위한 출력을 생성하는 데 사용되고 repr ()은 디버그 개발을 위해 사용되며 객체의 공식을 나타냅니다.

예:

>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
'2018-04-08 18:00:15.178404'
>>> repr(today)
'datetime.datetime(2018, 4, 8, 18, 3, 21, 167886)'

출력에서 repr ()은 날짜 객체의 공식 표현을 보여줍니다.


3

1) 결과 repr('foo')문자열 'foo' 입니다. 파이썬 셸에서 표현식의 결과도 표현으로 표현되므로 본질적으로을 볼 수 repr(repr('foo'))있습니다.

2) eval식의 결과를 계산합니다. 결과는 항상 (예 : 숫자, 문자열 또는 객체)입니다. 다음과 같이 여러 변수가 동일한 값을 참조 할 수 있습니다.

x = 'foo'
y = x

x와 y는 이제 같은 값을 나타냅니다.

3) 나는 당신이 여기서 무엇을 의미하는지 전혀 모른다. 예를 들어보고 싶은 것을 게시 할 수 있습니까?


1

당신이 말할 때

foo = 'bar'
baz(foo)

당신은 통과되지 않은 foo받는 baz기능. foo이 경우 값을 나타내는 데 사용되는 이름 일 뿐이며 'bar'해당 값이 baz함수에 전달됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.