파이썬에서 함수는 단순한 코드 블록이 아니라 완전한 객체(full object)입니다. def 문을 사용하거나 람다(lambda) 표현식을 작성하면, 파이썬은 자동으로 함수 객체를 생성해 줍니다.
함수 객체에 속성 할당하기
함수가 객체이기 때문에 일반 객체처럼 속성(attribute)을 할당하고 다시 조회할 수 있습니다. 아래 예제를 통해 확인해 보겠습니다.
예제 코드
def foo(): pass foo.score = 20 print(type(foo)) print(foo.score) print(type(lambda x: x))
실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻습니다.
<class 'function'> 20 <class 'function'>
결과 분석
출력 결과에서 알 수 있듯이, def로 정의한 함수와 람다 표현식 모두 타입이 function으로 나타납니다. 이는 두 방식 모두 동일하게 함수 객체를 생성한다는 의미입니다.
또한 foo.score = 20처럼 함수에 임의의 속성을 부여할 수 있고, 이후 foo.score로 값을 정상적으로 읽어올 수 있습니다.
파이썬 함수가 객체인 이유
파이썬에서 함수는 일급 객체(first-class object)로 취급됩니다. 즉, 함수는 다음과 같은 특징을 가집니다.
- 변수에 할당할 수 있습니다.
- 다른 함수의 인자로 전달할 수 있습니다.
- 함수의 반환값으로 사용할 수 있습니다.
- 객체처럼 속성과 메서드를 가질 수 있습니다.
함수 내부에는 데이터 변수는 물론 다른 함수까지 정의할 수 있습니다. 이러한 유연성 덕분에 파이썬에서는 클로저(closure), 데코레이터(decorator), 콜백(callback) 등 강력한 프로그래밍 기법을 활용할 수 있습니다.
정리
결론적으로, 파이썬의 함수는 완전한 객체입니다. 함수는 속성과 메서드를 가질 수 있고, 내부에 데이터 변수나 함수를 포함할 수도 있습니다. 함수를 객체로 다룰 수 있다는 점은 파이썬 프로그래밍의 핵심적인 특징 중 하나이며, 이를 잘 이해하면 더욱 유연하고 표현력 있는 코드를 작성할 수 있습니다.