본문 바로가기
개발자모드/혼자공부하는파이썬

[파이썬#15] 함수 만들기 (함수 호출, 매개변수, 리턴값)

by 요니L 2022. 7. 8.


함수의 기본

함수는 한마디로 코드의 집합이다. 함수를 생성하는 기본 형태는 다음과 같다.

def 함수 이름():
    문장

 

→ 기본적인 함수

[실행결과]

 

 


함수에 매개변수 만들기

비주얼 스튜디오 코드에 함수를 사용하면서 자동 완성 기능이 작동하는 것을 본 적이 있을 것이다. 

print() 함수를 작성할 때 괄호 안에 있는 것들 모두 매개변수라고 부른다. 

매개변수는 함수를 생성할 때 괄호 내부에 식별자를 입력해서 만든다.

def 함수 이름( 매개변수, 매개변수, ... ):
    문장

 

→ 매개변수의 기본

[실행결과]

함수의 괄호 내부에 value, n이라는 식별자를 입력했다. 이렇게 입력하면 이는 매개변수가 된다. 이렇게 매개변수를 만들면 함수를 호출할 때 값을 입력해서 함수 쪽으로 전달할 수 있다. 

 

 

 

↘ 매개변수와 관련된 TypeError 예외처리 

함수를 생성할 때 매개변수를 만들었는데, 함수를 호출할 때 매개변수를 넣지 않거나 더 많이 넣으면 어떻게 될까?

print_n_times() 함수의 매개변수 n이 없다라는 오류이다. 함수를 선언할 때의 매개변수와 함수를 호출할 때의 매개변수가 같아야 한다. 적어서도 안 되고, 많아서도 안 된다.

 

 


가변 매개변수

print() 함수는 매개변수를 원하는 만큼 입력할 수 있다. print() 함수와 같이 매개변수를 원하는 만큼 받을 수 있는 함수를 가변 매개변수라고 부른다. 

 

def 함수 이름(매개변수, 매개변수, ..., *가변매개변수):
    문장

※ 가변 매개변수 사용 제약조건

↘ 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다.

가변 매개변수는 하나만 사용할 수 있다.

 

→ 가변 매개변수 함수

[실행결과]

 


기본 매개변수

print(value, ... , sep='  ', end='\n', file=sys.stdout, flush=False)

print() 함수 가장 맨 앞에 있는 value가 가변 매개변수이다. 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다고 했는데 매개변수가 왔다. 그런데 특이하게 '매개변수=값' 형태로 되어 있다. 이 같은 형태를 기본 매개변수라고 부르며, 매개변수를 입력하지 않았을 경우 매개변수에 들어가는 기본값이다. 

 

※ 기본 매개변수 사용 제약조건

↘ 기본 매개변수 뒤에는 일반 매개변수가 올 수 없다.

 

☞ 기본 매개변수 뒤에 일반 매개변수를 오지 못하게 막은 이유

만약 print_n_times(n=2, value) 형태로 사용할 수 있다면 print_n_times("안녕하세요") 라고 입력했을 때 "안녕하세요"라는 글자가 첫 번째 매개변수에 할당되어야 하는지, 두 번째 매개변수에 할당되어야 하는지 확실하게 알 수 없다. 그래서 파이썬 언어는 내부적으로 기본 매개변수 뒤에 일반 매개변수가 오지 못하게 막았다.

 

 

→ 기본 매개 변수

[실행결과]

매개변수 n을 n=2라는 형태로 입력했다. n을 입력하지 않을 경우 기본값이 2로 들어간다. 

 

 


키워드 매개변수

 

↘ 기본 매개변수가 가변 매개변수보다 앞에 올 때 

기본 매개변수가 가변 매개변수가 앞에 올 때는 기본 매개변수의 의미가 사라진다. 다음 코드의 n에는 무엇이 들어갈까?

[실행결과]

매개변수가 순서대로 입력되므로 n에는 "안녕하세요"가 들어가고, values에는 ["즐거운", "파이썬~"]이 들어온다. 그런데 range() 함수의 매개변수에는 숫자만 들어올 수 있으므로 TypeError 오류가 발생한다.

 

즉, 기본 매개변수는 가변 매개변수 앞에 쓸 수 없다.

 

 

↘ 가변 매개변수가 기본 매개변수보다 앞에 올 때 

[실행결과]

가변 매개변수가 우선시되어 매개변수 끝에 입력한 3은 n의 값이 아니라 가변 매개변수의 값으로 인식한다. 그래서 3번 반복이 아니라 2번만 반복되어 출력된다. 그럼 두 가지를 사용할 수 있는 방법은 없을까? 이런 상황을 대비해서 키워드 매개변수 기능을 만들었다. 

 

 

↘ 키워드 매개변수 

print(value, ... , sep='  ', end='\n', file=sys.stdout, flush=False)

value를 여러 개 입력할 수 있으므로 가변 매개변수를 앞에 두고, 뒤에 기본 매개변수들이 들어가 있는 형태이다. 이러한 기본 매개변수가 지정된 함수를 사용할 때는 다음과 같이 사용한다. 매개변수 이름을 직접적으로 지정해서 값을 입력한다. 

 

따라서 이전 코드에서 ["안녕하세요", "즐거운", "파이썬~"] 이 3번 반복 출력되려면 매개변수 이름을 직접적으로 지정해서 값을 입력한다.

[실행결과]

 

↘ 기본 매개변수 중에서 필요한 값만 입력하기

키워드 매개변수는 기본 매개변수들로 구성된 함수에서도 많이 사용된다.

 

→ 여러 함수 호출 형태

[실행결과]

 

#1) 기본 형태
test(10, 20, 30)   #60
 
:: 첫 번재 매개변수 a는 일반 매개변수이므로 해당 위치에 반드시 입력해야 한다. 

 
#2) 키워드 매개변수로 모든 매개변수 지정
test(a=10, b=100, c=100) #210
#3) 키워드 매개변수로 모든 매개변수를 마구잡이 지정
test(c=10, a=100, b=200) #310
 
:: 일반 매개변수 이지만 키워드 매개변수처럼 사용할 수 있다. 키워드 매개변수를 사용하는 경우는 순서도 상관이 없다.
 
 
#4) 키워드 매개변수로 일부 매개변수만 지정한 형태
test(10, c=200) #220
 
:: b를 생략한 형태이다. 일반적으로 일반 매개변수는 필수로 입력한다. 순서에 맞게 입력하면 된다. 기본 매개변수는 필요한 것만 키워드를 지정해서 입력하는 경우가 많다.
 
 
 

☞ 파이썬 라이브러리 문서

https://docs.python.org/3/library/index.html

 

The Python Standard Library — Python 3.10.5 documentation

The Python Standard Library While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It also describes some of the opt

docs.python.org

 

 

 

 

 

 

 


리턴

input() 함수를 생각해보자. input() 함수는 함수를 실행하고 나면 함수의 결과를 받아서 사용했다. 이와 같은 함수의 결과를 리턴값이라고 부른다. 왜 리턴이라고 하는 걸까?

 

↘ 자료 없이 리턴하기

함수 내부에서는 return이라는 키워드를 사용할 수 있다. 이 키워드는 함수를 실행했던 위치로 돌아가라는 뜻으로, 함수가 끝나는 위치를 의미한다.

[실행결과]

return 키워드를 만나는 순간 함수가 종료되어 이후 문장인 "B위치"는 출력되지 않는다. 

 

 

↘ 자료와 함께 리턴하기

 

[실행결과]

return 키워드 뒤에 100이라는 숫자를 입력하여 함수의 실행결과로 100이 출력되는 것을 확인할 수 있다. 

 

 

↘ 아무것도 리턴하지 않기

[실행결과]

아무것도 리턴하지 않았을 때의 리턴값은 None이다. 

 

 


기본적인 함수의 활용

일반적으로 함수는 값을 만들어 리턴하는 형태로 많이 사용한다. 

def 함수(매개변수):
    변수 = 초기값

    ~~ 여러가지 처리~~

    return 변수

 

→ 범위 내부의 정수를 모두 더하는 함수

[실행결과]

 

 

→ 기본 매개변수와 키워드 매개변수를 활용해 범위의 정수를 더하는 방법

기본 매개변수를 사용하면 함수를 조금 더 편리하게 사용할 수 있다. 

[실행결과]

함수를 잘 만드는 것은 코드를 많이 보는 방법밖에는 없다. 

 

 

 


연습문제

<연습문제1>

Q. 다음 빈칸을 채워 매개변수를 전달된 값들을 모두 곱해서 리턴하는 가변 매개변수 함수를 만들어 보자.

def mul (*values):
                                                                     

#함수를 호출한다.
print(mul(5, 7, 9, 10))

[실행결과]
3150

[실행결과]

 

 

 

 

여기까지.

 

댓글