파이썬 입문 4 (함수)
Today I Learned
매일 배운 것을 정리하며 기록합니다. Python 함수에 대해 공부하고 있습니다.
함수(function)
- 코드의 집합
- 함수명 뒤에 소괄호를 사용하여 실행(호출)함
- 괄호 안에는 여러 가지 자료를 넣을 수 있으며 이러한 자료를 매개변수라고 부름
- 함수를 호출하여 얻게 되는 결과를 리턴값이라고 함
- ex)
def 함수 이름():
문장
가변 매개변수
- 매개변수를 원하는 만큼 받을 수 있는 함수
- 가변 매개변수 뒤에는 일반 매개변수가 올 수 없음
- 가변 매개변수는 하나 만 사용할 수 있음
기본 매개변수
- 매개변수에 아무것도 넣지 않아도 들어가는 값
- '매개변수=값' 형태로 사용
- 기본 매개변수 뒤에는 일반 매개변수가 올 수 없음
키워드 매개변수
- 가변 매개변수와 기본 매개변수 둘을 같이 쓸 수 있게 해주는 매개변수
- 매개변수 이름을 지정해서 입력하는 매개변수
리턴
- 함수를 실행했던 위치로 돌아가라는 뜻으로, 함수가 끝나는 위치를 의미
재귀 함수(recursion)
- 자기 자신을 호출하는 것을 의미
- 대표적인 예시로 팩토리얼, 피보나치 수열이 있음
- ex)
def factorial(n):
if n === 0:
return 1
else:
return n * factorial(n -1)
factorial(5) # 120
메모화(memorization)
- 재귀 함수가 같은 값을 구하는 연산을 반복하기 때문에 오래걸리는 문제를 해결하는 방법
- dictionary를 사용하여 한 번 계산한 값을 저장함, 이를 메모한다고 표현함
-ex)
# 메모 변수를 만듦
memo = {
1: 1,
2: 1
}
# 함수 선언
def fibonacci(n):
if n in memo:
return memo[n]
else:
output = fibonacci(n -1) + fibonacci(n -2)
memo[n] = output
return output
fibonacci(10) # 55
튜플(tuple)
- 리스트와 비슷하지만 한 번 결정된 요소는 바꿀 수 없다는 특징이 있음
- 함수의 리턴에 튜플 사용 시 여러 개의 값을 리턴하고 할당할 수 있어 함수와 함께 많이 사용됨
- ex)
# 튜플 생성
tuple_test = (10, 20, 30)
# 튜플 출력
tuple_test[0] # 10
tuple_test[1] # 20
tuple_test[2] # 30
# 괄호 없는 튜플
tuple_test1 = 10, 20, 30, 40
print(tuple_test1) # (10, 20, 30, 40)
print(type(tuple_test1)) # <class 'tuple'>
# 여러 개의 값 리턴
def test():
return (10, 20)
a, b = test()
# 출력
print(a) # 10
print(b) # 20
람다(lambda)
- 매개변수로 함수를 전달할 때 함수를 쉽게 선언하는 방법
- 함수를 매개변수로 전달하는 대표적인 표준함수에는 map(),filter() 함수가 있음
- map() 함수는 함수와 리스트를 받아 리스트 요소를 함수에 넣어 리턴된 값으로 새로운 리스트를 구성해줌
- filter() 함수는 함수와 리스트를 받아 리스트 요소를 함수에 넣어 리턴된 값이 True인 것으로 새로운 리스트를 구성해줌
- ex) lambda 매개변수: 리턴값
# map()
output_a = map(lambda x: x * x, list_input_a)
print(list(output_a)) # [1, 4, 9, 16, 25]
# filter()
output_b = filter(lambda x: x < 3, list_input_a)
print(list(output_b)) # [1, 2]
Reference : 윤인성, 『혼자 공부하는 파이썬』, 한빛미디어 (2019)
Author And Source
이 문제에 관하여(파이썬 입문 4 (함수)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qmasem/TIL-파이썬-입문-4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)