함수의 output
- 함수의 리턴 (return)
- 함수는 항상 반환되는 값이 있으며, 어떠한 객체라도 상관 없음
- 반드시 한 개의 객체만 반환됨
- 복수의 객체를 반환하는 경우: 복수의 객체를 하나의 tuple로 반환
- 명시적인 return 값이 없는 경우: None을 기본적으로 반환
# 복수의 객채를 return 하는 경우
def goo(a, b):
return a+b, a-b
print(goo(1, 2))
print(type(1, 2))
-------------------------------
# 결과
(3, 1) # 두 개의 값이 하나의 튜플 객체에 담겨져 리턴됨
tuple
# 명시적인 리턴 값이 없는 경우
def hello():
print('hi')
hello()
type(hello())
------------------
# 결과
hi # 함수가 호출되며, 단순 출력됨 (이는 리턴과는 다르다)
hi
NoneType # 명시적으로 리턴값이 없더라도, 기본적으로 NoneType을 반환함을 알 수 있다.
함수 예시
# 너비, 높이를 입력 받아 사각형의 넓이와 둘레를 튜플로 리턴하는 함수를 작성하라
def rectangle(width, height):
area = width * height
perimeter = 2 * (width + height)
return area, perimeter
print(rectangle(30, 20))
함수의 input
- 매개변수 (parameter)
- 함수에 입력으로 전달된 값을 받는 변수로, 함수 내부에서 활용함
- 함수의 정의 부분에서 볼 수 있음
def func(x):
return x + 2
# 위 소스코드에서의 x가 매개변수이다.
- 인자 (argument)
- 함수를 호출할 때, 함수에 실제로 전달되는 입력 값
- 함수를 호출하는 부분에서 볼 수 있음
func(10)
# 위 코드에서 함수에 들어가는 실질적인 값, 10이 인자이다.
여러가지 인자
- 위치 인자 (Positional Arguments)
- 기본적으로 함수 호출 시 인자는 위치에 따라 함수 내에 전달됨
- 가장 기본적인 전달방식
def add(x, y):
return x + y
add(2, 3)
# 할당 과정
x = 2
y = 3
- 기본 인자 값 (Default Arguments Values)
- 인자의 기본 값을 지정하여 함수 호출 시 인자 값을 선택적으로 설정할 수 있음
- 정의된 것보다 더 적은 개수의 인자들로 호출 가능
def add(x, y = 0):
return x + y
add(2)
# 할당 과정
x = 2
y = 0
- 키워드 인자 (Keyword Argument)
- 위의 기본 인자와는 다르게, 함수 선언부가 아닌 호출부에서 설정함
- 직접 변수의 이름으로 특정 인자를 전달할 수 있음
- 키워드 인자 다음에 위치 인자를 사용할 수 없음
def add(x, y):
return x + y
add(x=2, y=5)
# 할당 과정
x = 2
y = 5
# 다음과 같이 사용할 수 없음
add(a = 2, 5)
# 다음은 가능
add(2, y = 5)
- 가변 인자 리스트 (Arbitrary Argument Lists)
- 함수가 임의의 개수의 인자로 호출될 수 있도록 지정
- 인자들은 튜플로 묶여 처리됨
- 매개변수 앞에 *을 붙여 표현한다.
def add(*args):
for arg in args:
print(arg)
# 다음과 같이 호출 가능
add(2, 3, 4, 5)
# 정수를 여러 개 받아서 가장 큰 값을 반환하는 함수 my_max()를 작성하라
# max 내장 함수 사용은 금지
def my_max(*numbers):
if len(numbers):
max_value = numbers[0] # 첫 번째 인자 값을 max_value로 설정
for number in numbers: # for문을 통해 끝까지 비교
if max_value < number: # 만약 비교하는 수가 더 크다면, max_value에 저장
max_value = number
return max_value
return '인자를 1개 이상 넣어라' # 인자가 없는 경우
- 가변 키워드 인자 (Arbitrary Keword Arguments)
- 함수가 임의의 개수의 키워드 인자로 호출될 수 있도록 지정
- 인자들은 딕셔너리로 묶여 처리됨
- 매개변수 앞에 **를 붙여 표현
def student(**kwargs):
for key, value in kwargs:
print(key, ':', value)
student(kim='psychology', lee='math', yang='computer science')
- 패킹(packing), 언패킹(unpacking)
- 패킹: 여러 인자를 받아 하나의 자료형으로 묶어 전달함
- 언패킹: 하나의 자료형에 담긴 여러 값들을 각각의 값으로 풀어 전달함
- * 기호를 사용하며, 파라미터 앞에 붙냐 혹은 인자 앞에 붙냐에 따라 그 기능이 달라짐
def get_number(a, *agrs): # 파라미터 앞에 *를 붙여주면 패킹
return a, agrs
print(get_numbers(1))
print(get_numbers(1, 2, 3))
# 언패킹
x = [1, 2, 3]
print(get_numbers(x))
print(get_numbers(*x)) # 인자 앞에 *를 붙여주면 언패킹
# 사실상 언패킹이 되어 1, 2, 3 이 인자값으로 들어감
num_list = [1, 2, 3, 4]
print(*num_list)
-----------------------
# 결과
1 2 3 4 # print(1, 2, 3, 4) 의 결과와 같음
- 주의사항
- 기본 인자 값을 가지는 인자 다음에 기본 값이 없는 인자가 따라올 수 없음
def greeting(name='Lee goo', age):
- 키워드 인자 다음에 위치 인자를 활용할 수 없음
add(x=3, 5)
- 가변 인자 리스트가 위치 인자보다 앞에 올 수 없음
# 잘못된 함수 정의
def add(*args, x):
# 올바른 함수 정의
def add(x, *args):
- 가변 키워드 인자가 위치 인자보다 앞에 올 수 없음
# 잘못된 함수 정의
def add(*kwargs, x):
# 올바른 함수 정의
def add(x, *kwargs):
- 위치 인자, 가변 인자 리스트, 가변 키워드 인자를 함께 사용할 때의 올바른 예
def func(x, *args, **kargs):
댓글