본문 바로가기
Python

함수의 input과 output

by Salgoo26 2021. 7. 21.

함수의 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):

'Python' 카테고리의 다른 글

에러와 예외처리  (0) 2021.07.21
재귀 함수  (0) 2021.07.21
함수의 Scope  (0) 2021.07.21
함수 기초  (0) 2021.07.21
파이썬 시작  (0) 2021.07.20

댓글