python 예약어 중 eval
이라는 예약어가 있다(무엇에 쓰는 물건인고?). 무엇인지, 언제 쓰는지 알아보자.
1. eval()
python3 문서에서는 eval()
에 대해 다음과 같이 설명하고 있다.
eval(expression[, globals[, locals]])
...
인자는 '문자열 및 선택적 globals 및 locals'다. (...)
반환 값은 계산된 표현식의 결과입니다.
즉 문자열이나 표현식, 변수들을 입력으로 받아 이를 계산하고 반환해주는 함수이다. 단, 문자열, 표현식, 변수들이 모두 str
타입이어야 한다.
아래는 간단한 예제이다.
x = 1
eval('x+1')
>>>> 2
2. 문자열 입력
requests
등으로 json, list 등의 데이터를 받는 경우 문자열로 받아지는 경우들이 많다. upbit api로 비트코인의 분봉 데이터를 요청해서 받으면 아래와 같이 나온다.
import requests
url = 'https://api.upbit.com/v1/candles/minutes/1?market=KRW-BTC&count=1000&to=2021-07-01T12:24:00Z'
response = requests.get(url)
response.text
>>>> '[{"market":"KRW-BTC","candle_date_time_utc":"2021-07-01T12:23:00", ....},
{"market":"KRW-BTC","candle_date_time_utc":"2021-07-01T12:22:00", ....},
....
{"market":"KRW-BTC","candle_date_time_utc":"2021-07-01T12:10:00", ....}]'
type(response.text)
>>>> str
잘 모르는 상태에서 보면 'string 데이터를 파싱하면 되겠네'라는 생각이 들 것이다. 하지만 이내 불가능 하다는 것을 깨닫게 되고 모든 의욕을 잃는다. 문자열을 바로 list()
로 반환하고자 해도 문자열 입력이기 때문에 character 단위로 다 쪼개질 뿐이다.
우리가 하고 싶은 것은 '문자열로 표현된 리스트를 리스트 자체로 만드는 것'인데 이럴 경우 eval()
을 쓰면 된다. eval()
을 사용하면 해당 '표현식'을 입력받아 계산하여 반환해준다고 한다. 한번 해보자.
test = ['a', 1, 2, '34']
test = str(test)
test
>>>> "['a', 1, 2, '34']"
eval(test)
>>>> ['a', 1, 2, '34']
type(eval(test))
>>>> <class 'list'>
728x90
'python 메모' 카테고리의 다른 글
[pandas] warning 메세지 출력 안하기 (0) | 2021.11.19 |
---|---|
[sklearn] classification_report 결과 파일로 저장하기 (0) | 2021.09.02 |
[python] requests 라이브러리 한글 인코딩 (0) | 2021.07.27 |
[pandas] apply + custom function을 사용한 다중 입력 및 출력 (0) | 2021.06.10 |
[python] datetime 사용하기 (0) | 2021.06.06 |