파이썬에서 모든 함수는 일급이다.
프로그래밍 언어 이론가들은 다음과 같은 작업을 수행할 수 있는 프로그램 객체를 '일급 객체'로 정의한다.
함수를 다른 변수와 동일하게 다루는 언어를 일급 함수를 가졌다 라고 표현한다.
- 데이터 구조체의 변수나 요소에 할당할 수 있다.
- 함수 인수로 전달할 수 있다.
- 함수 결과로 반환할 수 있다.
하나씩 예를 들어 보자
1. 데이터의 구조체의 변수나 요소에 할당할 수 있다.
mult 라는 변수에 square 함수를 할당하면 mult 변수와 square 함수는 동일한 메모리 주소를 출력한다.
2. 함수 인수로 전달할 수 있다.
3. 함수 결과로 반환할 수 있다. 추후 이 개념은 python의 decorator 와도 연관이 있다.
함수가 일급객체이기 때문에 할 수 있는 것은?
✅ 고차 함수를 만들 수 있다.
✅ 콜백을 사용할 수 있다.
📚 고차함수(고위함수)
함수를 인수로 받거나, 함수를 결과로 반환하는 함수를 고위 함수(higher-order function)라고 한다.
대표적으로 파이썬에 map() 이 있다.
(sorted() 내장 함수도 일급 함수의 예다, sorted() 함수는 선택적인 key 인수로 함수를 전달받아 정렬할 각 항목에 적용한다.)
map() 함수 사용
모든 리스트 원소에 1을 더한다고 가정하자.
👩💻 List Comprehension 사용
-> 결과가 리스트로 나온다. 즉 그만큼의 리스트가 하나 더 복제되어 메모리를 차지하게 된다.
👩💻 map 사용
- 제너레이터 함수여서 내부의 데이터가 실제로 메모리에 용량을 차지하는 것들이 아니다.
- 호출되기 전까지는 가상의 값만 가지고 있다.
- map 은 lazy evaluation을 진행해서 메모리를 절약
- map 은 map iterator 객체를 반환 ( 메모리 절약 )
map 함수를 사용하면 다음과 같이 함수를 인수로 받을 수 있다.
📚 콜백(callback)을 사용할 수 있다.
프로그래밍에서 콜백은 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백 함수라고 하며, 매개변수를 통해 콜백 함수를 전달받는 함수를 고차 함수라고 한다. 따라서, 콜백 함수는 고차 함수에 의해 호출되며, 이때 고차 함수는 필요에 따라 콜백 함수에 인수를 전달할 수 있다.
즉, 위 예시에서 map이 고차 함수이고 내가 정의한 plus_1 함수가 콜백 함수가 되는 것이다.
👩💻 느낀 점
항상 파이썬에서 일급 함수, 일급 함수 이랬는데 무슨 내용인지 몰라서 잘 알아들을 수 없었다.
파이썬의 언어 특성을 파악하고 나니 사용했던 함수들에 대해 한층 더 이해가 깊어진 것 같다.
역시 기본이 젤루 중요하다.
'Language > Python' 카테고리의 다른 글
[Python] Module dependcy 새로운 관리 툴 Poetry | LIM (0) | 2022.12.17 |
---|---|
[Python] Staticmethod vs Classmethod | LIM (0) | 2022.12.16 |
[Python] Super() 기초 개념 및 활용 예제 | LIM (0) | 2022.11.08 |
[Python] MultiProcessing map() vs imap() | LIM (0) | 2022.09.19 |
[Python] 코루틴으로 짜여있지 않은 함수 비동기적으로 이용하기(feat.run_in_executor) | LIM (0) | 2022.07.14 |
댓글