파이썬 함수 기본 구조
def 함수명(매개변수):
<수행할 코드1>
<수행할 코드2>
...
def는 함수를 만들 때 사용하는 예약어이다. 함수 이름 뒤 괄호 안의 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수다.
def add(a, b):
return a+b
a = 3
b = 4
print(add(3,4))
############# RESULT ##############
7
매개변수 지정하여 호출하기
def add(a, b):
return a-b
print(add(a=3, b=5))
print(add(b=5, a=3))
print(add(a=5, b=3))
print(add(b=3, a=5))
############# RESULT ##############
-2
-2
2
2
입력값의 개수를 모를 때
def add(*args):
result = 0
for i in args:
result = result + i
return result
print(add(1,2,3))
print(add(1,2,3,4,5,6))
print(add(1,2,3,4,5,6,7,8,9,10))
############# RESULT ##############
6
21
55
위 예시처럼 인자의 개수가 정해지지 않았을 때는 함수 선언부에서 *args 처럼 별을 붙여서 만들면, 입력값을 전부 모아서 튜플로 만들어주기 때문에 별을 붙여 사용하면 편리하다. 이를 활용한 다음과 같은 예시도 있다.
def add_mul(choice, *args):
if choice == "add" :
result = 0
for i in args:
result = result + i
elif choice == "mul" :
result = 1
for i in args:
result = result * i
return result
print(add_mul('add', 1,2,3,4,5))
print(add_mul('mul', 1,2,3,4,5))
############# RESULT ##############
15
120
직접 네이밍과 로직을 구성하여 딕셔너리 형태로 만들어주는 매개변수 작성법도 있다.
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(a=1)
print_kwargs(name='foo', age=3)
위 print_kwargs라는 함수를 통해 입력값 a=1 또는 name='foo', age=3이 모두 딕셔너리로 출력할 수 있다. 즉, **를 매개변수 이름 앞에 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결과값이 그 딕셔너리에 저장된다.
함수 결과(return) 관련
def add_and_mul(a,b):
return a+b, a*b
result = add_and_mul(3,4)
print(result)
result1, result2 = add_and_mul(3,4)
print(result1)
print(result2)
########## RESULT ###########
(7, 12)
7
12
만약, 함수내에 리턴을 위와 같이 a+b, a*b 두 개로 작성하였을 경우에는 튜플 값으로 리턴을 한다. 만약 이 두가지의 리턴 값을 하나의 튜플로 리턴을 받는 방식이 아닌, 각각의 값으로 구분되어 리턴을 받고 싶다면, 변수 두 개에 위와 같이 리턴을 받으면 된다. 개인적으로 경험했던 이전의 언어들과는 또 다른 느낌이어서 확실히 신기하다.
매개변수에 초기값 설정
def info(name, old, man=True):
print("Name : %s" % name)
print("Age : %d" % old)
if man:
print("Man")
else:
print("Woman")
info('sssukho', 29)
print('\n')
info('sssuksoon', 29, False)
위 예시 코드에서의 info 함수에서 세 번째 매개변수처럼, 매개변수에 미리 값을 넣어줌으로써 매개변수에 초기값을 미리 설정하는 것이 가능하다. 함수의 매개 변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초기값을 미리 설정해두면 유용하다.
lambda
람다는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. 보통 함수를 한줄로 간결하게 만들 때 사용한다. 보통 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다. 다음은 완전히 같은 역할을 하는 람다와 함수의 예시다. 특히 lambda는 return 명령어가 없어도 결과값을 돌려준다.
# 두 변수의 값을 더하는 lambda
add = lambda a, b: a+b
result = add(3,4)
print(result)
# 두 변수의 값을 더하는 함수
def add(a, b):
return a+b
print(add(3,4))
- Reference : https://wikidocs.net/24
'Python' 카테고리의 다른 글
[Python3] 내장 함수 관련 정리 (0) | 2020.03.19 |
---|---|
[Python3] Collection 모듈 내 Counter 관련 (0) | 2020.03.17 |
[Python3] 제어문 관련 정리 (0) | 2020.03.13 |
[Python3] 집합 관련 정리 (0) | 2020.03.12 |
[Python3] 제어문 관련 정리 (0) | 2020.03.12 |