repr과 str은 둘 다 문자열을 반환한다.
하지만 사소하지만 중요한 차이점이 있다.
hi = 24
print(str(hi))
print(repr(hi))
24
24
숫자가 아닌 문자열에 적용해보면,
hi = "hi-guten-tag"
print(str(hi))
print(repr(hi))
hi-guten-tag
'hi-guten-tag'
같은 문자열임에도 repr()을 쓰면 '' 따옴표가 추가되는 걸 볼 수 있다.
쉽게 생각하면 str은 우리가 쉽게 볼 수 있는, 그런 비공식적인 문자열을 반환하는 반면에
repr은 공식적인 문자열을 반환한다.
즉, repr은 시스템, 인터프리터가 객체를 인식할 수 있는 문자열을 반환하는 것이다.
따라서 eval(repr(obj))를 한다면 해당 obj를 얻을 수 있는 것이다.
쉽게 말해서 repr(obj)는 obj를 나타내는 문자열을 리턴한다.
한 번 테스트 해보면,
class A:
def __repr__(self):
return 'A()'
a = A()
b = eval(repr(a))
print(type(b))
이렇게 repr을 재정의했고, repr(a)를 통해서 'A()'이 반환되게 했다.
결과 값은 당연히도,
<class '__main__.A'>
이 나왔다.
뭐 이건 사실 repr 대신에 str로 해도 되지만, 아무튼 repr은 안에 들어온 object를 문자열로 표현한다고 보면 될 것 같다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
[Vscode] Python Function annotation Theme is not Working (VScode에서 파이썬 타입 어노테이션, 함수 어노테이션, 타입 힌팅에 테마가 적용되지 않는 문제 해결법) (5) | 2022.06.12 |
---|---|
[Python] Python의 삼항연산자 (Python's Ternary operators) (0) | 2022.06.11 |
[Python] namespace와 함수 (전역변수의 참조와 변경, 그리고 오류가 나는 이유) (0) | 2022.05.07 |
[Python] Intellisense와 Document 보이게 하는 법 (0) | 2022.05.03 |
[Python] globals() 딕셔너리와 global 키워드를 통한 참조의 시간 차이 (0) | 2022.04.04 |