함수(Function)
1. 함수 란?
1-1. 함수란 블랙 박스이다!
- 함수(Function)란 입력(input)을 넣었을 때 어떠한 출력(output)을 반환 하는 것을 말한다.
- 내부적으로 어떤 방식으로 처리하는지 알지 못해도(블랙박스), 특정 입력을 넣었을 때 원하는 결과를 반환할 것이라 기대한다.
- 앞서 프로그램이란 입력 → 처리 → 출력을 하는 것이라고 했었다. 함수도 큰 프로그램 안에 있는 미니 프로그램과 같다고 볼 수 있다.
- 파이썬에서는 함수라는 기능을 제공하여 코드의 중복을 방지하고 효율성을 도모한다.
1-2. 함수의 구조
- 함수의 기본적인 구조는 아래와 같다.
def 함수명(매개변수):
함수에서 실행되는 동작 1
함수에서 실행되는 동작 2
...
return 반환값
- 먼저 def 키워드와 함께 함수명과 매개변수를 작성하고 마지막에는 반드시 콜론(:)을 붙인다.
- 함수에서 실행되는 동작들을 작성한다.
- 마지막에 return 키워드와 함께 반환값을 작성한다.
- 여기서 매개변수가 함수의 입력에 해당하고, return이 출력에 해당한다.
- 변수명과 마찬가지로 함수명을 지을 때도 같은 규칙이 적용된다.
함수명(식별자) 작성 규칙
1) 알파벳, 언더바(_), 숫자로 구성되어야 한다.
2) 첫 글자에는 숫자가 올 수 없다.
3) 대소문자를 구별한다.
4) 띄어쓰기가 필요한 경우 언더바(_)로 구분한다.
5) 예약어로 지을 수 없다.
1-3. 함수를 사용하는 이유
- 함수를 사용하는 이유는 다양하지만, 대표적으로 아래 세 가지가 있다.
- 코드의 재 사용성 : 동일한 동작을 하는 코드를 중복으로 작성하지 않고, 함수로 만들어서 재사용한다.
- 가독성 : 코드를 중복으로 작성하지 않기 때문에 전체적인 가독성이 좋아지고, 함수 이름을 통해 쉽게 기능 파악이 가능하다.
- 유지보수 : 어떤 코드의 동작을 변경해야 할 때, 코드가 중복으로 작성되어 있다면 일일히 변경해야 하지만 함수로 되어 있다면 하나만 변경하면 된다.
- 예시와 함께 함수 사용 전과 후가 어떻게 개선되는지 살펴보자.
1. 함수 사용 전
동일한 동작을 하는 if, else 조건문이 2번 중복으로 작성되어 있음을 알 수 있다.
# 1) a와 b 중 더 큰 수를 bigger1에 할당
a = 5
b = 10
if a > b:
bigger1 = a
else:
bigger1 = b
# 2) c와 d 중 더 큰 수를 bigger2에 할당
c = 6
d = 3
if c > d:
bigger2 = c
else:
bigger2 = d
# 3) 각각 b와 c가 출력
print(bigger1, bigger2)
10 6
2. 함수 사용 후
if, else 조건문이 함수화 되면서 중복을 제거하였다.
# x와 y 중 더 큰 수를 반환하는 get_bigger 함수
def get_bigger(x, y):
if x > y:
return x
else:
return y
a = 5
b = 10
bigger1 = get_bigger(a, b)
c = 6
d = 3
bigger2 = get_bigger(c, d)
print(bigger1, bigger2)
함수 사용 후 개선된 점은 아래와 같다.
- 코드의 재사용성 : 두 수를 비교하는 조건문을 여러 번 작성할 필요없이 함수 안에 1번만 작성하고 재사용하고 있다.
- 가독성 : 코드가 더 깔끔해지기도 했고, 코드를 일일히 읽지 않아도 get_bigger라는 함수의 이름만 보고도 어떤 동작을 하는지 파악할 수 있다.
- 유지보수 : 조건문이 2번 작성 되었을 때는 무언가 코드를 고치려면 2번 고쳐야 했지만, 지금은 get_bigger 안에서 1번만 고치면 된다.
2. 함수 사용하기
2-1. 선언과 호출
- 선언(define)이란 def 키워드를 이용하여 하나의 함수를 작성하는 것을 말한다.
- 호출(call)은 함수명()의 형식으로 할 수 있으며, 선언된 함수를 실행하는 것을 말한다.
- 호출 시 함수의 입력값을 매개변수로 넘겨줄 수 있다.
# 선언
def add(x, y):
return x + y
result = add(1, 2) # 호출
print(result)
3
2-2. 매개변수와 인자
- 매개변수(parameter)란 함수에 입력으로 전달된 값을 받는 변수를 말한다. (이후 함수 내에서 변수로 사용)
- 인자(argument)란 함수를 호출 할 때 넘기는 값을 말한다.
# add 함수의 매개변수는 x, y 이며 함수 내에서 변수처럼 사용
def add(x, y):
return x + y
result = add(1, 2) # 1, 2가 인자
print(result)
- 매개변수와 인자는 엄연히 다른 개념이긴 하지만, 암묵적으로 혼용해서 쓰기도 한다.
2-3. 반환값
- 반환값(return)이란 일련의 처리 과정을 거쳐 함수에서 반환하는 결과 값을 말한다.
def add(x, y):
return x + y # 반환값(리턴값)
result = add(1, 2) # add 함수의 반환값이 변수 result에 할당
print(result)
3
2-4. 내장 함수와 메서드
“내가 더 멀리 보았다면 이는 거인들의 어깨 위에 서 있었기 때문이다.”

- 파이썬은 다양한 내장 함수들을 제공한다.
- 내장 함수(Built-in Functions)란 사람들이 자주 사용하는 기능을 함수로 만들어 파이썬에 내장 시킨 것들을 말한다.
- 내장 함수는 수많은 테스트를 거쳐 가장 효율적으로 작성 되었으므로 믿고 쓰면 된다. 즉 우리는 거인의 어깨 위에서 프로그래밍을 할 수 있게 되었다.
- 여태까지 우리가 사용했던 len(), print(), list() 등이 무언가 특별한 존재가 아니라, 단순히 미리 만들어진 함수를 호출하는 것에 불과했던 것이다.
numbers = [1, 2, 3, 4, 5]
length = len(numbers) # 내장함수 len 호출 및 반환값 할당
print(length) # 내장함수 print 호출
5
- 이는 리스트의 삽입과 삭제에서 사용했던 append(), pop()도 마찬가지이다. 이들도 함수이다.
- 단, 이들은 메서드(method)라는 표현을 사용한다. 리스트 함수도 맞는 말이지만 리스트 메서드라는 표현이 더 정확하다.
📝 함수와 메서드는 무엇이 다른가?
함수와 메서드는 포함 관계이다. 함수가 더 넓은 개념이고, 그 안에 메서드가 포함되어 있다.
메서드는 함수 중에서도 특정 타입에 종속된 함수를 지칭하는 용어다.
예를 들어 append, pop과 같은 메서드는 리스트에서만 사용 가능하다. 문자열에서는 사용할 수 없다. 그래서 append는 독립적으로 쓰이지 않고 리스트.append()와 같은 식으로 점(.)을 찍고서 사용된다. 따라서 이들은 함수인 것은 맞지만, 더 정확하게 메서드라는 용어로 표현한다. 반면 len()과 같은 함수는 특정 타입에 종속되지 않고 독립적으로 사용되기 때문에 메서드가 아닌 함수라고 부른다. 정리하자면 모든 메서드는 함수이지만, 모든 함수가 메서드는 아니다.
3. 매개변수와 반환값의 유무에 따른 분류
함수의 매개변수와 반환값은 유동적으로 존재한다. 둘 다 있거나 없을 수도 있고, 하나만 있을 수도 있다. 함수를 선언할 때 어떤 식으로 선언할 지 결정하는 것은 어디까지나 개발자의 재량이다.
3-1. 매개변수 O, 반환값 O
데이터를 입력 받아 처리한 후 반환 하는 가장 기본적인 경우
# 매개변수와 반환값 모두 존재
def add(x, y):
return x + y
result = add(1, 2) # 반환값이 있으므로 변수에 할당
print(result)
3
3-2. 매개변수 O, 반환값 X
데이터를 입력 받아 처리하지만 값을 반환할 필요 없는 경우
def hello(name):
print(f"Hello! {name}!") # 출력이 목적이므로 값을 굳이 반환하지 않음
hello("kyle") # 반환값이 없으므로 변수에 할당할 필요가 없음
hello("alex")
Hello! kyle!
Hello! alex!
3-3. 매개변수 X, 반환값 O
입력 없이 항상 정해진 처리만 하고 값을 반환하는 경우
# 1부터 10까지의 정수 중 짝수만 골라서 리스트로 반환하는 함수 (항상 정해진 동작만 수행하고 그 값을 반환)
def even_numbers():
a = []
for i in range(1, 11):
if i % 2 == 0:
a.append(i)
return a
numbers = even_numbers()
print(numbers)
[2, 4, 6, 8, 10]
3-4. 매개변수 X, 반환값 X
입력 없이 항상 정해진 처리만 하면서 값도 반환할 필요가 없는 경우
def welcome():
print("Welcome to Python world!")
welcome()
Welcome to Python world!
'Python' 카테고리의 다른 글
모듈 (0) | 2024.03.31 |
---|---|
파이썬 메서드와 내장함수 (1) | 2024.03.31 |
기초 자료구조와 로직 설계 (1) | 2024.03.23 |
반복문(Loop) (1) | 2024.03.23 |
컨테이너(Container) 자료형 (1) | 2024.03.23 |
함수(Function)
1. 함수 란?
1-1. 함수란 블랙 박스이다!
- 함수(Function)란 입력(input)을 넣었을 때 어떠한 출력(output)을 반환 하는 것을 말한다.
- 내부적으로 어떤 방식으로 처리하는지 알지 못해도(블랙박스), 특정 입력을 넣었을 때 원하는 결과를 반환할 것이라 기대한다.
- 앞서 프로그램이란 입력 → 처리 → 출력을 하는 것이라고 했었다. 함수도 큰 프로그램 안에 있는 미니 프로그램과 같다고 볼 수 있다.
- 파이썬에서는 함수라는 기능을 제공하여 코드의 중복을 방지하고 효율성을 도모한다.
1-2. 함수의 구조
- 함수의 기본적인 구조는 아래와 같다.
def 함수명(매개변수):
함수에서 실행되는 동작 1
함수에서 실행되는 동작 2
...
return 반환값
- 먼저 def 키워드와 함께 함수명과 매개변수를 작성하고 마지막에는 반드시 콜론(:)을 붙인다.
- 함수에서 실행되는 동작들을 작성한다.
- 마지막에 return 키워드와 함께 반환값을 작성한다.
- 여기서 매개변수가 함수의 입력에 해당하고, return이 출력에 해당한다.
- 변수명과 마찬가지로 함수명을 지을 때도 같은 규칙이 적용된다.
함수명(식별자) 작성 규칙
1) 알파벳, 언더바(_), 숫자로 구성되어야 한다.
2) 첫 글자에는 숫자가 올 수 없다.
3) 대소문자를 구별한다.
4) 띄어쓰기가 필요한 경우 언더바(_)로 구분한다.
5) 예약어로 지을 수 없다.
1-3. 함수를 사용하는 이유
- 함수를 사용하는 이유는 다양하지만, 대표적으로 아래 세 가지가 있다.
- 코드의 재 사용성 : 동일한 동작을 하는 코드를 중복으로 작성하지 않고, 함수로 만들어서 재사용한다.
- 가독성 : 코드를 중복으로 작성하지 않기 때문에 전체적인 가독성이 좋아지고, 함수 이름을 통해 쉽게 기능 파악이 가능하다.
- 유지보수 : 어떤 코드의 동작을 변경해야 할 때, 코드가 중복으로 작성되어 있다면 일일히 변경해야 하지만 함수로 되어 있다면 하나만 변경하면 된다.
- 예시와 함께 함수 사용 전과 후가 어떻게 개선되는지 살펴보자.
1. 함수 사용 전
동일한 동작을 하는 if, else 조건문이 2번 중복으로 작성되어 있음을 알 수 있다.
# 1) a와 b 중 더 큰 수를 bigger1에 할당
a = 5
b = 10
if a > b:
bigger1 = a
else:
bigger1 = b
# 2) c와 d 중 더 큰 수를 bigger2에 할당
c = 6
d = 3
if c > d:
bigger2 = c
else:
bigger2 = d
# 3) 각각 b와 c가 출력
print(bigger1, bigger2)
10 6
2. 함수 사용 후
if, else 조건문이 함수화 되면서 중복을 제거하였다.
# x와 y 중 더 큰 수를 반환하는 get_bigger 함수
def get_bigger(x, y):
if x > y:
return x
else:
return y
a = 5
b = 10
bigger1 = get_bigger(a, b)
c = 6
d = 3
bigger2 = get_bigger(c, d)
print(bigger1, bigger2)
함수 사용 후 개선된 점은 아래와 같다.
- 코드의 재사용성 : 두 수를 비교하는 조건문을 여러 번 작성할 필요없이 함수 안에 1번만 작성하고 재사용하고 있다.
- 가독성 : 코드가 더 깔끔해지기도 했고, 코드를 일일히 읽지 않아도 get_bigger라는 함수의 이름만 보고도 어떤 동작을 하는지 파악할 수 있다.
- 유지보수 : 조건문이 2번 작성 되었을 때는 무언가 코드를 고치려면 2번 고쳐야 했지만, 지금은 get_bigger 안에서 1번만 고치면 된다.
2. 함수 사용하기
2-1. 선언과 호출
- 선언(define)이란 def 키워드를 이용하여 하나의 함수를 작성하는 것을 말한다.
- 호출(call)은 함수명()의 형식으로 할 수 있으며, 선언된 함수를 실행하는 것을 말한다.
- 호출 시 함수의 입력값을 매개변수로 넘겨줄 수 있다.
# 선언
def add(x, y):
return x + y
result = add(1, 2) # 호출
print(result)
3
2-2. 매개변수와 인자
- 매개변수(parameter)란 함수에 입력으로 전달된 값을 받는 변수를 말한다. (이후 함수 내에서 변수로 사용)
- 인자(argument)란 함수를 호출 할 때 넘기는 값을 말한다.
# add 함수의 매개변수는 x, y 이며 함수 내에서 변수처럼 사용
def add(x, y):
return x + y
result = add(1, 2) # 1, 2가 인자
print(result)
- 매개변수와 인자는 엄연히 다른 개념이긴 하지만, 암묵적으로 혼용해서 쓰기도 한다.
2-3. 반환값
- 반환값(return)이란 일련의 처리 과정을 거쳐 함수에서 반환하는 결과 값을 말한다.
def add(x, y):
return x + y # 반환값(리턴값)
result = add(1, 2) # add 함수의 반환값이 변수 result에 할당
print(result)
3
2-4. 내장 함수와 메서드
“내가 더 멀리 보았다면 이는 거인들의 어깨 위에 서 있었기 때문이다.”

- 파이썬은 다양한 내장 함수들을 제공한다.
- 내장 함수(Built-in Functions)란 사람들이 자주 사용하는 기능을 함수로 만들어 파이썬에 내장 시킨 것들을 말한다.
- 내장 함수는 수많은 테스트를 거쳐 가장 효율적으로 작성 되었으므로 믿고 쓰면 된다. 즉 우리는 거인의 어깨 위에서 프로그래밍을 할 수 있게 되었다.
- 여태까지 우리가 사용했던 len(), print(), list() 등이 무언가 특별한 존재가 아니라, 단순히 미리 만들어진 함수를 호출하는 것에 불과했던 것이다.
numbers = [1, 2, 3, 4, 5]
length = len(numbers) # 내장함수 len 호출 및 반환값 할당
print(length) # 내장함수 print 호출
5
- 이는 리스트의 삽입과 삭제에서 사용했던 append(), pop()도 마찬가지이다. 이들도 함수이다.
- 단, 이들은 메서드(method)라는 표현을 사용한다. 리스트 함수도 맞는 말이지만 리스트 메서드라는 표현이 더 정확하다.
📝 함수와 메서드는 무엇이 다른가?
함수와 메서드는 포함 관계이다. 함수가 더 넓은 개념이고, 그 안에 메서드가 포함되어 있다.
메서드는 함수 중에서도 특정 타입에 종속된 함수를 지칭하는 용어다.
예를 들어 append, pop과 같은 메서드는 리스트에서만 사용 가능하다. 문자열에서는 사용할 수 없다. 그래서 append는 독립적으로 쓰이지 않고 리스트.append()와 같은 식으로 점(.)을 찍고서 사용된다. 따라서 이들은 함수인 것은 맞지만, 더 정확하게 메서드라는 용어로 표현한다. 반면 len()과 같은 함수는 특정 타입에 종속되지 않고 독립적으로 사용되기 때문에 메서드가 아닌 함수라고 부른다. 정리하자면 모든 메서드는 함수이지만, 모든 함수가 메서드는 아니다.
3. 매개변수와 반환값의 유무에 따른 분류
함수의 매개변수와 반환값은 유동적으로 존재한다. 둘 다 있거나 없을 수도 있고, 하나만 있을 수도 있다. 함수를 선언할 때 어떤 식으로 선언할 지 결정하는 것은 어디까지나 개발자의 재량이다.
3-1. 매개변수 O, 반환값 O
데이터를 입력 받아 처리한 후 반환 하는 가장 기본적인 경우
# 매개변수와 반환값 모두 존재
def add(x, y):
return x + y
result = add(1, 2) # 반환값이 있으므로 변수에 할당
print(result)
3
3-2. 매개변수 O, 반환값 X
데이터를 입력 받아 처리하지만 값을 반환할 필요 없는 경우
def hello(name):
print(f"Hello! {name}!") # 출력이 목적이므로 값을 굳이 반환하지 않음
hello("kyle") # 반환값이 없으므로 변수에 할당할 필요가 없음
hello("alex")
Hello! kyle!
Hello! alex!
3-3. 매개변수 X, 반환값 O
입력 없이 항상 정해진 처리만 하고 값을 반환하는 경우
# 1부터 10까지의 정수 중 짝수만 골라서 리스트로 반환하는 함수 (항상 정해진 동작만 수행하고 그 값을 반환)
def even_numbers():
a = []
for i in range(1, 11):
if i % 2 == 0:
a.append(i)
return a
numbers = even_numbers()
print(numbers)
[2, 4, 6, 8, 10]
3-4. 매개변수 X, 반환값 X
입력 없이 항상 정해진 처리만 하면서 값도 반환할 필요가 없는 경우
def welcome():
print("Welcome to Python world!")
welcome()
Welcome to Python world!
'Python' 카테고리의 다른 글
모듈 (0) | 2024.03.31 |
---|---|
파이썬 메서드와 내장함수 (1) | 2024.03.31 |
기초 자료구조와 로직 설계 (1) | 2024.03.23 |
반복문(Loop) (1) | 2024.03.23 |
컨테이너(Container) 자료형 (1) | 2024.03.23 |