Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 str() 대 repr()?

<시간/>

python의 str() 및 repr() 메서드는 모두 문자열의 문자열 표현에 사용됩니다. 둘 다 같은 강아지를 섬기는 것처럼 보이지만 약간의 차이가 있습니다.

x가 원하는 객체인 곳에서 파이썬 내장 함수 str(x)를 호출할 때 어떤 일이 일어나는지 알아차린 적이 있습니까? str(x)의 반환 값은 두 가지 방법에 따라 달라집니다. 기본 선택은 __str__이고 폴백은 __repr__입니다.

먼저 python 문서가 이에 대해 무엇이라고 말하는지 봅시다 -

>>> help(str)
Help on class str in module builtins:

class str(object)
| str(object='') -> str
| str(bytes_or_buffer[, encoding[, errors]]) -> str
|
| Create a new string object from the given object.

>>> help(repr)
Help on built-in function repr in module builtins:

repr(obj, /)
Return the canonical string representation of the object.

For many object types, including most builtins, eval(repr(obj)) == obj.

이제 몇 가지 예를 사용하여 이 두 가지 방법을 이해하려고 합니다.

>>> str(123)
'123'
>>> repr(123)
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str('Python')
'Python'
>>> repr('Python')
"'Python'"

repr() 및 str()의 반환 값은 정수 값에 대해 동일하지만 string의 반환 값에는 차이가 있습니다. 하나는 형식이고 다른 하나는 비공식입니다.

이제 공식 파이썬 문서를 보면 __str__은 객체의 "비공식"(가독성) 문자열 표현을 찾는 데 사용되는 반면 __repr__은 개체의 "공식" 문자열 표현을 찾는 데 사용됩니다.

공식 표현과 비공식 표현의 차이점은 str 값에 대한 __repr__의 기본 구현을 eval에 대한 인수로 호출할 수 있고 반환 값은 유효한 문자열 개체라는 것입니다. 이 함수(repr())는 문자열을 받아서 그 내용을 파이썬 코드로 평가합니다.

따라서 "'Python'"을 전달하면 해당 작업이 수행됩니다. 그러나 'Python'은 물론 정의되지 않은 Python 변수로 해석되어 오류가 발생합니다. 아래는 그것을 이해하는 코드입니다 -

>>> x = "Python"
>>> repr(x)
"'Python'"
>>> x1 = eval (repr(x))
>>> x == x1
True

따라서 __str__의 반환 값을 eval에 대한 인수로 호출하려고 하면 실패합니다.

>>> y = "Python"
>>> str(y)
'Python'
>>> y1 = eval(str(y))
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
y1 = eval(str(y))
File "<string>", line 1, in <module>
NameError: name 'Python' is not defined

둘의 차이점을 보여주는 또 다른 예는 -

입니다.
>>> import datetime
>>> now = datetime.datetime.now()
>>> str(now)
'2019-03-29 01:29:23.211924'
>>> repr(now)
'datetime.datetime(2019, 3, 29, 1, 29, 23, 211924)'

위의 출력에서 ​​str(now)는 now 값을 포함하는 문자열을 계산하는 반면 repr(now)는 now 객체를 다시 작성하는 데 필요한 파이썬 코드를 반환합니다.

주요 차이점

str()
repr()
객체를 읽을 수 있도록 만들기
객체를 재현하는 필수 코드
최종 사용자에게 출력 생성
개발자를 위한 출력 생성

클래스에 대해 __str__ 및 __repr__을 작성할 때 위의 사항을 고려해야 합니다.