
함수...함수....
고등학생 때 수도 없이 봤던 f(x) 그거...
배웠던걸 생각해보면 정의역이니 공역이니 이항관계니 이런 말들이 떠오르는데..
그냥 오른쪽의 그림으로 모든 게 설명되지 않을까?
특정한 값 x를 넣어서 그에 상응하는 값이 나오는
그 과정을 함수라고 했었다
마치 자판기나.. 믹서기 등에 비유하곤 했다
그럼 프로그래밍에서의 함수는 뭘까?
나의 유일신에게 여쭤봐야겠다
A function is a unit of code that is often defined by its role within a greater code structure. Specifically, a function contains a unit of code that works on various inputs, many of which are variables, and produces concrete results involving changes to variable values or actual operations based on the inputs.
구글신에게 부탁드렸더니 이런 답을 주셨다
더 큰 코드 구조 내에서 역할에 의해 정의되는 코드 단위
...? 한글로 말하니까 더 어려운데 ㅋㅋㅋ
원래 이해하기에 정의를 봐선 어렵다 왜 쓰는지 어떻게 쓰는지 보면 뭔지 아는 거지 뭐
그럼 함수를 왜 쓸까?
간단하다.
생산성 때문에 사용한다 현재 내가 아는 범위 내에선 그렇다
중복되는 코드가 있고 줄이는 게 생산성에 증진시킨다면 줄이는 게 맞다
함수를 사용하면 중복되는 코드를 함수로 만들어서 필요할 때 호출해서 사용하면 되니
효율적이고 효율적인 건 통상적으로 생산성을 높여준다
유지 보수를 할 때도 마찬가지다
이 프로그램이 같은 작업을 100번 하든 1000번 하든 함수만 고쳐주면
그 모든 작업들을 하나하나 건드릴 필요가 없으니 효율적이다
결괏값을 내기 위해 여러 함수를 거쳐야 한다면
코드가 길게 늘어서 있는 것보단 함수만 있는 편이 프로그램 흐름을 이해하기도 편할 것이고
오류 잡기도 편할 것이다
안 쓸 이유가 없다
그럼 함수를 어떻게 쓸까?
기본 구조는 다음과 같다
# 함수정의하기
def 함수이름(매개변수(또는 인수)):
(수행할 문장1)
(수행할 문장2)
...
(수행할 문장n)
# 함수 호출하기
함수이름(매개변수)
예를 들어 매개변수 2개를 받아서 더한 값을 리턴하는 함수를 만든다면 다음과 같다
위 함수의 이름은 sum이고 매개변수는 a와 b 2개를 받는다
그리고 수행할 문장으로 "a+b의 값을 '리턴'한다"라는 의미의 코드를 넣었다
함수를 호출할 때 첫 번째 호출처럼 따로 인자를 지정해주지 않고
순서대로 입력받는 인자를 positional arguments라고 한다
이 경우 함수를 정의할 때와 호출할 때 매개변수의 인덱스가 동일해야 원하는 결괏값이 나온다
두 번째, 세 번째 호출처럼 따로 키워드로 짝을 지어주는 인자들을 keyword arguments라고 한다
이 경우엔 위치와는 무관하다!
네 번째 호출처럼 섞어서 호출할 때는 mixed positional arguments 다
이 경우에도 마찬가지로 keyword arguments의 위치는 무관하지만
positional arguments는 위치에 신경 써야 한다
그리고 함수를 프린트했더니 리턴값인 3이 나왔다
아래의 오류가 난 코드를 보자
위처럼 함수를 정의할 때도 디폴트값으로 할당해 줄 수 있는데
그런 경우에도 호출할 때처럼 positional argument의 위치에 유념해야 한다
SyntaxError: non-default argument follows default argument 라는 구문 오류가 떴는데
기본 인자 뒤에 기본인자가 아닌 인자가 있다는 얘기다
두 인자의 위치를 바꾸면 오류가 나지 않게 된다
이게 일반적인 함수의 개념이다!
당신은 이제 함수를 안다! 나도 알고!
아니 근데 잠깐... 일반적인...?
그럼 일반적이지 않은 함수도 있다는 것인가?
그렇다 근데 그건 다음 포스팅에서 다룰 것이다
고양이 밥 주러 가야 되니까ㅎㅎ
'dev > python' 카테고리의 다른 글
| [python] 함수 - *args, **kwargs (0) | 2022.02.16 |
|---|---|
| [python] 함수 - 일반적이지 않은 함수 (0) | 2022.02.07 |
| [python] 문자열 포매팅 (0) | 2022.02.06 |
| [python] 기본 연산자(5) - 맴버 연산자, 식별 연산자 (0) | 2022.02.06 |
| [python] 기본 연산자(4) - 논리 연산자, 비트 연산자 (0) | 2022.02.06 |