실버를 위한 코딩/오늘의 파이썬 팁

파이썬에서 '식(Expression)과 문(Statement)의 차이

forSilver 2025. 4. 15. 00:11
반응형

파이썬에서 '식(Expression)과 문(Statement)의 차이

파이썬에서 ‘문’(statement) ‘식’(expression)은 비슷해 보이지만 엄연히 다릅니다. 프로그래밍을 이해하는 데 있어 이 둘의 차이를 아는 것은 매우 중요합니다. 특히 eval() 함수처럼 식만 사용할 수 있는 문맥에서는 그 차이가 결정적인 역할을 합니다.

 

예제 중심으로 구분해 보기


1. 용어 정의

📌 문(statement)

: 프로그램에서 어떤 동작(행위)를 수행하도록 지시하는 코드 단위입니다. 결과 값을 반환하지 않아도 됩니다.

예: if, for, while, print(), a = 1 등

“행동하라”는 명령에 가까움


📌 식(expression)

: 값을 만들어내는 코드입니다. 항상 어떤 값으로 평가됩니다.

예: 2 + 3, "안녕", len("abc"), a + b 등

“값을 계산하라”는 요청에 가까움


2. 예제 비교

코드 문(statement)인가?  식(expression)인가?   설명
a = 3 ✅ 문 ❌ 식 아님 값을 변수에 할당함
2 + 5 ❌ 문 아님 ✅ 식 7이라는 값을 만들어냄
print("hello") ✅ 문 ❌ 식 아님 출력이라는 동작을 수행함
"hello" + " world" ❌ 문 아님 ✅ 식 문자열 결합 결과 반환
if a > 0: ✅ 문 ❌ 식 아님 조건에 따라 동작 지시
len("abc") ❌ 문 아님 ✅ 식 결과로 숫자 3 반환

3. eval()에서 중요한 차이

eval("2 + 3")        # ✅ 가능 → 결과: 5
eval("print('hi')")  # ✅ 가능 → 결과: hi (단, 반환값 없음)
eval("a = 1")        # ❌ 오류 → 문(statement)이므로 안 됨
  • eval()은 반드시 ‘식’만 허용합니다.
  • 문은 실행은 되지만 값을 반환하지 않거나, 아예 문법 오류를 냅니다.

4. exec()와의 차이점

eval() 식(expression)만 값을 반환
exec() 문(statement) 전체 값을 반환하지 않음, 여러 줄도 가능
exec("a = 5")     # ✅ 변수 할당 가능
eval("a = 5")     # ❌ 오류 발생

5. 결론

구분 문 (Statement) 식 (Expression)
의미 동작을 수행 값을 계산
결과 값이 없어도 됨 반드시 값이 생김
예시 a = 1, if, for 3 + 5, "hello", len(s)
eval()에서 사용 가능? ❌ 불가 ✅ 가능

💡 TIP

파이썬 쉘에서 입력 시 값이 바로 출력되는 경우가 있는데, 이는 ‘식’이기 때문입니다.
반면에 값을 반환하지 않는 문은 아무 출력이 없거나, None이 반환될 수 있습니다.