함수(function)는 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것으로,
작업에 필요한 데이터를 전달받을 수 있으며, 작업이 완료된 후에는 작업의 결과를 호출자에게 반환할 수 있다.
함수를 사용하기 위해 함수의 이름으로 입력함으로써 함수를 호출(call)한다고 하고,
우리가 여러 번 반복해야 되는 처리 단계를 하나로 모아서 필요할 때 함수를 호출하여 사용할 수 있다.
print()나 input()함수와 같이 파이썬이 기본적으로 제공하는 함수도 있지만, 다음과 같은 방법으로
우리가 직접 함수를 정의하여 사용할 수도 있다.
def 내가 정의하는 함수 이름(매개변수1, 매개변수2, ...) : ex) def get_area(radius) :
명령문1 area = 3.14*radius**2
명령문2 return area
함수에서 return 문장은 함수를 종료시키고 그 결과를 반환해준다.
함수에서 실제 값을 전달받을 수 있는데,
이 때 전달받는 실제 값은 인수(argument)라고 하고, 인수를 전달받는 변수는 매개 변수(parameter)라고 한다.
리턴값이 있는 함수를 호출할 때는 보통 변수에 할당하는 작업을 한다.
리턴값이 없는 함수는 실행하고 사라진다.
파이썬에서는 다음과 같이 함수가 여러 개의 값을 반환할 수 있다.
def get_input():
return 2, 3
x, y = get_input()
# 이 때, x는 2이고 y는 3이다.
참고로, 파이썬에서 함수의 헤더만 결정하고 몸체는 나중에 작성하고 싶은 경우에는 다음과 같이 pass 키워드를 사용할 수 있다.
def sub():
pass
여러 개의 함수가 포함된 프로그램을 작성할 때는 함수의 정의와 명령문의 순서에 주의하여야 한다.
파이썬 인터프리터는 소스 코드를 읽을 때, 각 함수의 정의와 각 문장들을 읽는다.
※ 하지만, 함수 내에서는 아직 정의되지 않은 함수가 등장할 수는 있다.
main()함수를 정의하는 도중에
main()함수가 정의된 다음에 정의될 함수, 아직 정의되지 않은 함수 get_area()이 등장하는데, 이렇게 함수 내에서 정의되지 않은 함수가 등장할 수 있는 이유는, 함수 정의 안의 문장이 함수가 호출될 때까지는 실행되지 않기 때문이다.
반면, 함수 외부에 있는 문장은 발견될 때마다 바로 실행된다.
따라서 함수를 호출하기 전에는 반드시 함수를 정의해야 한다.
위의 main()함수는 실행이 시작되는 지점이고, 다른 언어에서도 사용되는 공통적인 함수 이름이다.
함수 이름
함수 이름은 일반적으로 동사+명사 형태를 사용하는 것이 좋다. ex)get_area()
파이썬 인터프리터는 변수 이름과 함수 이름을 구분하지 않으므로, 함수 이름과 같은 이름의 변수를 사용하면 오류가 발생한다.
인수와 매개 변수
함수 호출시 데이터를 주고 받기 위해 필요하고,
인수(argument)는 호출 프로그램에 의하여 함수에 실제로 전달되는 값이며,
매개 변수(parameter)는 이 인수 값을 전달받는 변수이다.
함수가 호출될 때마다 인수는 함수의 매개 변수로 전달되는데, 호출될 때마다 이 인수는 달라질 수 있다.
여기서 주의할 점은 매개 변수의 개수와 인수의 개수가 일치되게 전달해야 한다.
그리고, 혼동을 불러 일으킬 수 있으므로 가급적 매개 변수를 일반 변수로 사용하지 않는 것이 좋다.
디폴트 인수(default argument)
파이썬에서 함수의 매개 변수가 기본값을 가질 수 있는데, 이것을 디폴트 인수라고 한다.
원래는 매개변수의 개수에 맞게 인수를 전달하지 않으면 오류가 발생하지만, 인수가 부족할 수 있는 경우에 기본값을 미리 넣어주면 자동으로 인수로 적용되어 편리할 것이다.
키워드 인수(keyword argument)
보통의 인수들은 함수 호출 시에 위치에 의해 구별되는 위치 인수(positional argument)이지만,
인수들 앞에 키워드를 두어 인수들을 구분하도록 하는 것을 키워드 인수라고 한다.
즉, 인수의 이름을 명시적으로 지정해 위치에 구애받지 않고 인수값을 매개 변수로 전달하는 것이다.
위치 인수와 키워드 인수과 섞여 등장할 수 있지만, 순서는 반드시 위치 인수가 키워드 인수 앞에 있어야 한다.
가변 인수(variable argument)
인수의 개수가 정해지지 않은 경우 매개변수 앞에 *을 붙여 표현하면, 다양한 개수의 인수를 전달 받을 수 있다.
하지만, *매개변수 형태로는 미정인 개수의 키워드 인수를 전달받을 수는 없어 매개변수 앞에 이중 별표(**)를 사용하여,
인수를 이름과 값을 저장하는 데이터 구조인 딕셔너리 형태로 전달받는다.
cf. 언패킹 연산자로서의 *(단일 별표)와 **(이중 별표)
*(단일 별표) 연산자는 파이썬이 제공하는 모든 반복 가능한(iterable) 객체에서 사용할 수 있지만,
**(이중 별표)연산자는 딕셔너리 객체에서만 사용할 수 있다.
매개 변수 앞의 *표는 '시퀀스를 푼다'는 의미로 사용되며,
매개변수가 리스트일 경우 매개변수 앞에 *를 붙여 인수를 전달하면, 인수가 리스트가 하나의 인수로 전달되는 것이 아니라,
리스트의 항목들이 리스트에서 풀려서 각 항목들이 각각의 인수로 항목 개수만큼의 여러 개의 인수로 전달된다.
재귀함수는 종료조건이 꼭 주어져야 한다. 안그러면 무한루프에 빠지게 된다.
'컴퓨터 사이언스 > TIL 정리' 카테고리의 다른 글
[프론트엔드][파이썬] Day-35 아스키 코드, 정규식, 예외 처리 (0) | 2022.05.17 |
---|---|
[프론트엔드][파이썬] TIL Day-31 (0) | 2022.05.14 |
[프론트엔드][자바스크립트] TIL Day-21 overflow와 ::before& ::after (0) | 2022.04.25 |
[프론트엔드][자바스크립트] TIL Day-20.1 DOM 문서 객체 모델 (0) | 2022.04.22 |
[프론트엔드][자바스크립트] TIL Day-19.2 수학 객체, 배열 객체, 문자열 객체 (0) | 2022.04.21 |