- 는 개념 정리
- 는 개인적으로 새롭게 알게 된 점
Chapter 4까지 자료, 조건문, 반복문에 대해서 살펴보았음. 이는 프로그래밍의 논리와 관련된 가장 핵심적인 부분.
Chapter 5부터는 '프로그래밍을 어떻게 더 쉽게 만들 것인가'와 관련됨.
5-1. 함수 만들기
[용어 정리]
- 함수를 사용한다 = 함수를 호출한다.
- 매개변수: 함수를 호출할 때 괄호 내부에 넣는 여러가지 자료
- 매개변수는 함수를 생성할 때, 괄호 내부에 식별자를 입력해서 만듦.
- 리턴값: 함수를 호출해서 최종적으로 나오는 결과
매개변수와 관련된 TypeError
함수를 호출할 때는, 함수를 선언할 때와 같은 개수의 매개 변수를 입력해야 함.
- 함수 호출 시, 생성한 매개변수보다 매개변수를 적게 넣은 경우
TypeError: print_n_times() missing 1 reqiured positional argument: 'n'
- 함수 호출 시, 생성한 매개변수보다 매개변수를 더 넣은 경우
TypeError: print_n_times() takes 2 positional arguments but 3 were given
매개변수
함수를 호출하는데 사용하는 파이썬의 매개변수에는 4가지 유형이 있음.
- 위치 매개변수 (Positional Arguments, 일반 매개변수라고도 함)
- 기본 매개변수 (Default Arguments)
- 키워드 매개변수 (Keyword Arguments)
- 가변 매개변수 (Arbitrary Arguments)
1. 위치 매개변수 (Positional Arguments)
- 함수 내 매개변수의 위치 순서와 데이터 타입에 맞게 정확하게 입력을 해 주어야만 하는 매개변수.
2. 기본 매개변수 (Default Arguments)
- 함수를 호출 할 때, 매개변수 입력이 없을 경우에 함수를 정의할 때 입력한 기본값 (default value)을 사용할 수 있게 해 줌.
- 함수를 정의할 때 기본값 설정이 안 된 상태에서, 함수 호출 시 매개변수 값 입력을 빼 먹으면 TypeError가 나는데, 기본값 매개변수를 사용하면 TypeError 없이 사용할 수 있음.
- 단, 기본 매개변수 뒤에는 일반 매개변수(위치 매개변수)가 올 수 없음.
- SyntaxError: non-default argument follows default argument 에러 발생.
- 책이랑 따로 찾아본 내용이랑 모두 혼합되어 있어서: 위치 매개변수 == 일반 매개변수 임.
즉, 다음과 같이 사용될 수 없음.
# Wrong
def print_n_times(n=2, value)
for i in range(n):
print(value)
CODE
def print_me(company, name = "Who?"): #name='Who?' 기본 매개변수
print("Company:", company)
print("Name:", name)
print_me(company = "ABC Co.")
OUTPUT
Company: ABC Co.
Name: Who?
- name 매개변수를 입력하지 않았음에도 불구하고, 'Who?' 출력.
3. 키워드 매개변수 (Keyword Arguments)
- 함수를 호출 할 때, 매개변수의 이름(parameter name)으로 매개변수를 지정함.
- 만약 키워드 매개변수를 사용하지 않는다면, 입력 순서와 데이터 타입을 꼭 함수에서 정의한 순서와 맞추어야 함.
- e.g. 회사명 (company)과 임직원 이름 (name)을 출력하는 함수에서 매개변수 순서를 바꾸어서 입력했음에도 불구하고 출력은 함수에서 정의했던 순서대로 출력되었음을 알 수 있음.
CODE 1
def print_me (company, name):
print("Company:", company)
print("Name:", name)
print_me(company='ABDC Co.', name='Mr.Jack')
print()
print_me(name='Mr.Jack', company='ABC Co.')
OUTPUT 1
Company: ABCD Co.
Name: Mr.Jack
Company: ABC Co.
Name: Mr.Jack
만약 키워드 함수를 사용하지 않는다면 아래와 같이 출력됨.
CODE 2
print('ABCD Co.', 'Mr.Jack')
print()
print('Mr.Jack', 'ABC Co.')
OUTPUT 2
Company: ABCD Co.
Name: Mr.Jack
Company: Mr.Jack
Name: ABC Co.
4. 가변 매개변수 (Arbitrary Arguments)
- 매개변수 수가 상황에 따라서 변화하는 매개변수
- 대표적인 예, print()
- 위치, 키워드 인자의 개수가 많아지거나 인자의 수가 미정일 경우 가변 매개변수 사용함.
- 가변 매개변수는 2가지 종류가 있음
- *args_tupe: Positional 매개변수 (Tuple)
- 임의 개수의 positional 매개변수를 tuple 형태의 변수로 저장
- **args_dick: 키워드 매개변수 (Dictionary)
- 임의 개수의 keyword 매개변수를 dictionary 형태의 변수로 저장
- *args_tupe: Positional 매개변수 (Tuple)
1. *args_tuple: Positional 매개변수 (Tuple 형태)
- 괄호 안의 매개변수 입력란에 '* (Asterisk)'로 시작하는 매개변수 이름을 넣어줌. 이 가변 매개변수는 Tuple 형태.
- 가변 매개변수는 리스트처럼 사용하면 됨.
이 때, 사전형 (Dictionary Type)을 매개변수로 받아서 print 한다면?
- 여러 개의 사전형 값을 매개변수 값으로 입력하면 TypeError 발생
- TypeError: print_group() got an unexpected keyword argument 'A'
- 매개변수 값으로 다수 개의 사전형 값을 사용하고 싶을 때, **agrs_dick의 가변형 매개변수를 사용함.
2. **args_dict: 키워드 매개변수 (Dictionary 형태)
- Dictionary의 Key 값이 키워드 매개변수의 keyword가 됨.
- 파이썬 라이브러리의 함수들을 보다 보면, **kwagrs 라고 표현된 경우가 있는데, 이 때 kw가 KeyWord의 kw 임.
* 순서: *args_tuple 먼저, **args_dict 나중에 *
- *args_tuple과 **args_dict 두 가지 유형의 가변 매개변수를 모두 사용하여 함수를 정의할 수 있음.
- 단 이 때, *args_tuple 을 먼저 정의하고, **args_dict를 나중에 이어서 정의해야 함.
- **args_dict을 먼저 정의하면, 'SyntaxError: invalid syntax' 에러 발생.
* 가변 매개변수 주의 사항 *
- 가변 매개변수 뒤에는 일반 매개변수 (위치 매개변수)가 올 수 없음.
- 책에서는 일반 매개변수라고 칭하고 있어 그대로 가져옴. 이는 위치 매개변수를 의미함.
- 가변 매개변수는 하나만 사용할 수 있음. (책에서는 *args_tuple 만을 설명하고 있기 때문에 하나만 사용할 수 있다고 하였지만, *args_tuple과 **kwargs_tuple 2개를 사용할 수 있음)
리턴 (Return) 키워드
- 함수의 결과
- '자료 없이 리턴하기'와 '자료와 함께 리턴하기' 2가지 종류가 있음.
1. 자료 없이 리턴하기
- 함수를 실행했던 위치로 돌아가라는 뜻
- 함수가 끝나는 위치
CODE
def return_test():
print("a 위치")
return
print("b 위치")
return_test()
OUTPUT
a 위치
2. 자료와 함께 리턴하기
- 리턴 뒤에 자료를 입력하면 자료를 가지고 리턴함.
CODE
def return_test():
return 100
value = return_test()
print(value)
OUTPUT
100
아무것도 리턴하지 않기
CODE
def return_test():
return
value = return_test()
print(value)
OUTPUT
None
기본적인 함수의 활용
- 일반적으로 초깃값을 설정할 때는, 연산을 해도 값에 아무런 변화를 주지 않는 것을 사용.
- 덧셈식: 0
- 곱셈식: 1
'Python Basic > 혼공파' 카테고리의 다른 글
[혼공파] Chapter 05 ③함수 고급 (0) | 2021.01.12 |
---|---|
[혼공파] Chapter 05 ②함수의 활용 (0) | 2021.01.12 |
[혼공파] Chapter 04 반복문 ④문자열, 리스트, 딕셔너리와 관련된 기본 함수 (0) | 2021.01.12 |
[혼공파] Chapter 04 반복문 ③for 반복문과 while 반복문 (0) | 2021.01.11 |
[혼공파] Chapter 04 반복문 ②딕셔너리 (0) | 2021.01.11 |