함수
일정한 작업을 수행하는 코드를 정의한 것
함수 정의
- 함수는 def 키워드를 이용하여 정의한다.
- 함수는 다음 요소를 포함할 수 있다.
- 매개변수: 함수 내에서 사용되는 변수를 전달받기 위해 정의
- return: 함수에서 특정 값을 반환하기 위해 사용
- 반환 값은 무조건 하나만 존재해야 함에 유의한다.
함수 기본 구조
입력 값과 반환 값이 있는 함수
def 함수명(매개변수):
실행 코드1
실행 코드2
return 반환값
입력 값은 있으나 반환 값이 없는 함수
def 함수명(매개변수):
실행 코드1
실행 코드2
입력 값은 없고 반환 값이 있는 함수
def 함수명():
실행 코드1
실행 코드2
return 반환값
입력 값과 반환 값이 모두 없는 함수
def 함수명():
실행 코드1
실행 코드2
함수 예제
숫자 2개를 더하는 함수 (반환 값 O)
def add_func(a, b):
return a + b
result = add_func(10, 5)
print(result)
15
더한 값을 출력하는 함수 (반환 값 X)
def add_func(a, b):
print(a + b)
add_func(10, 5)
15
매개변수 값 미리 지정하기
def add_func(a=10, b=5):
print(a + b)
add_func() # 인수를 정하지 않으면 10 + 5
add_func(20, 30) # 인수를 정하면 해당 값으로 연산
15
50
- 디폴트 매개변수를 지정할 수 있으며, 만약 초기값이 없는 매개변수가 있다면 디폴트 매개변수는 꼭 해당 매개변수 뒤에 적어야 한다.
- 따로 매개변수를 입력하지 않으면 디폴트 값으로 대체된다.
*args: 매개변수가 미지수인 함수
- 입력이 몇 개인지 모르는 경우에 " *매개변수 "를 사용하여 함수를 정의할 수 있다.
- 가변 매개변수라고 한다.
- args란 arguments의 약자로, 꼭 이 이름으로 매개변수명을 지정할 필요는 없으나 관행적으로 이를 사용한다.
함수 기본 구조
고정적으로 받는 매개변수가 없는 경우
def 함수명(*args):
실행 코드1
실행 코드2
return 반환값
고정적으로 받는 매개변수가 있는 경우
def 함수명(매개변수1, ..., *args):
실행 코드1
실행 코드2
return 반환값
- *args 앞에 고정적으로 받는 매개변수를 정의할 수 있다.
- 반드시 *args 앞에 적어야 함에 유의하자.
함수 예제
더하기 함수
def add_func(*args):
result = 0
for i in args:
result += i
return result
result = add_func(1, 2, 3, 4, 5)
print(result)
15
- 입력이 몇 개든 상관없이 값을 더하는 함수를 정의하였다.
더하기&곱하기 함수
def math_func(command, *args):
if command == 'add':
result = 0
for i in args:
result += i
elif command == 'mul':
result = 1
for i in args:
result *= i
return result
result1 = math_func('add', 1, 2, 3, 4, 5)
result2 = math_func('mul', 1, 2, 3, 4, 5)
print(f'result1의 결과: {result1}')
print(f'result2의 결과: {result2}')
result1의 결과: 15
result2의 결과: 120
- command에 따라 더하기와 곱하기 연산 중 하나를 택해 진행하는 함수를 구현하였다.
- 이처럼 고정적으로 받는 매개변수를 정의할 수 있다.
**kwargs: 매개변수를 딕셔너리로 변환
- **를 붙여 매개변수를 설정하면, 인수를 받을 시 이를 함수 내부에서 딕셔너리로 변환한다.
- 키워드 매개변수라고 한다.
- 매개변수가 많은 경우 값에 대한 명칭을 명시함으로써, 매개변수를 잘못 전달하는 실수를 예방할 수 있다.
- kwargs란 keyword arguments의 약자이며, 굳이 이 이름으로 매개변수를 정의할 필요는 없으나 관행적으로 이를 사용한다.
함수 예제
매개변수를 출력하는 단순한 함수
def printf(**kwargs):
print(kwargs)
printf(a=10)
printf(age='26', name='kk')
{'a': 10}
{'age': '26', 'name': 'kk'}
- 결과를 보면 알 수 있듯이 대입식 좌측에 있는 값을 key, 우측에 있는 값을 value로 갖는 딕셔너리로 변환되었음음을 알 수 있다.
*args와 **kwargs를 동시에 사용하는 함수
- args와 kwargs를 동시에 사용할 수 있다.
- 이때 args가 무조건 kwargs보다 앞에 있어야 한다. 그렇지 않다면 오류가 발생한다.
def math_func(*args, **kwargs):
if list(kwargs.values())[0] == 'add':
result = 0
for i in args:
result += i
elif list(kwargs.values())[0] == 'mul':
result = 1
for i in args:
result *= i
return result
result1 = math_func(1, 2, 3, 4, 5, type='add')
result2 = math_func(1, 2, 3, 4, 5, type='mul')
print(f'result1의 결과: {result1}')
print(f'result2의 결과: {result2}')
result1의 결과: 15
result2의 결과: 120
global 명령어
- 함수 내에서 사용하는 변수들은 기본적으로 지역변수이지만, global 명령어를 사용하면 외부에서 선언된 변수를 함수 내부로 가져와 값을 변경할 수 있다.
- 전역변수와 같은 기능을 한다.
result = 0
def add_func(*args):
global result # global 명령어
for i in args:
result += i
add_func(1, 2, 3, 4, 5)
print(result)
15
lambda 표현식
- 간단하게 함수를 구현할 때 사용하는 예약어이다.
- lambda로 만든 함수는 return 키워드를 적지 않아도 결과값을 반환한다.
add = lambda a, b: a + b
print(add(10, 5))
15