eval 함수는 expression (표현식)을 기반으로 동작을 하는 함수이다. expression이 무엇인지 한번 알아보자.
eval('1+2')
>>
3
위와 같이 1+2 라는 동작을 문자열로 나타낸 것이 expression이다. 즉, 특정 동작을 나타낸 문자열 단위이다. 다른 expression도 확인해보겠다.
eval('len([1, 2, 3, 4])')
>>
4
eval('abs(-90)')
>>
90
다음과 같이 간단한 동작들을 expression을 통해 수행할 수 있다.
eval('l = [1, 2, 3]')
>>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
l = [1, 2, 3]
반면 eval을 통한 메모리 할당은 불가능하다. 클래스의 인스턴스로도 실험을 진행해보았지만, 실행되지 않았다.
l = [1, 2, 3]
eval('len(l)')
>>
3
그치만, 방심할 수 없다. 이미 메모리에 할당된 오브젝트에 대해서는 접근이 가능하다. 사용자가 eval 함수를 사용하면 프로그램에 대한 자유도를 주는 것이기에 악용할 수도 있는 단점이 있으므로 주의해야 한다.
'[Language] - Python' 카테고리의 다른 글
# 18. 데코레이터 (Decorator) (0) | 2021.11.09 |
---|---|
# 17. [Magic Method] __new__() & __init__() (0) | 2021.08.02 |
# 15. [Tip] chunk (0) | 2021.06.02 |
# 14. dictionary setdefault, defaultdict (0) | 2021.05.28 |
# 13. [Tip] win32com 모듈을 사용한 엑셀 제어 (0) | 2021.04.20 |
댓글