본문 바로가기
프로그래밍/Python 관련 정보

[Python Programming 기초] Eval/Exec함수

by 물박사의 저장공간 2024. 10. 25.

이 두 함수는 문자열화 되어 있는 수식 계산 또는 문장을 실행하는 역할을 합니다. 

 

Eval : 수식을 문자열로 입력하면 계산된 결과값을 반환
Exec :
실행 가능한 문장을 문자열로 입력하면 문장 수행

 

예시 보시면 쉽게 이해하실 것 같습니다. 

# 간단한 산술 연산
result1 = eval("2 + 3 * 4")
print(f"eval('2 + 3 * 4') 결과: {result1}")  # 출력: eval('2 + 3 * 4') 결과: 14

# 변수 사용 (현재 환경의 변수를 참조)
x = 10
result2 = eval("x * 2")
print(f"eval('x * 2') 결과: {result2}")  # 출력: eval('x * 2') 결과: 20

# 함수 호출 (현재 환경에 정의된 함수를 호출)
def greet(name):
    return f"안녕하세요, {name}님!"

message = eval("greet('철수')")
print(f"eval('greet('철수')') 결과: {message}")  # 출력: eval('greet('철수')') 결과: 안녕하세요, 철수님!

# 리스트 접근
my_list = [1, 2, 3]
element = eval("my_list[1]")
print(f"eval('my_list[1]') 결과: {element}")  # 출력: eval('my_list[1]') 결과: 2

 

eval( )은 "표현식"의 결과를 직접 반환합니다. 그래서 할당문이나 제어구조, 함수의 정의 같은 것들은 eval로 수행할 수 없습니다. 

 

# 변수 할당 및 출력
exec("y = 5")
print(f"exec('y = 5') 실행 후 y 값: {y}")  # 출력: exec('y = 5') 실행 후 y 값: 5

exec("print('exec 함수 실행 중...')")  # 출력: exec 함수 실행 중...

# 여러 줄의 코드 실행
code_block = """
z = 10
result = z + 5
print(f'code_block 실행 결과: {result}')
"""
exec(code_block)  # 출력: code_block 실행 결과: 15

# 함수 정의 및 호출
func_def = """
def say_hello(name):
    print(f'안녕, {name}!')
"""
exec(func_def)
say_hello("영희")  # 출력: 안녕, 영희!

# 조건문 실행
condition = "if 10 > 5: print('10은 5보다 크다!')"
exec(condition)  # 출력: 10은 5보다 크다!