이번 포스팅에서는 파이썬에서 함수의 매개변수(Parameter)에 대하여 공부를 해보고자 한다.
아래의 글을 먼저 보고 오면 이해하는 데에 도움이 될 것이다.
2022.09.24 - [Python/파이썬 기초] - [Python] 함수(Function) 정의 및 호출 기본
매개변수(Parameter)
매개변수는 선언부에 선언하는 변수로 호출할 때 전달된 인수를 저장하는 변수를 말한다.
0 ~ N 개 선언이 가능하고, 2개 이상 선언 시 ' , '를 구분자를 사용한다.
매개변수는 로컬 변수로 함수 내에서만 사용할 수 있다.
로컬 변수는 함수 안에 선언된 변수로 함수 안에서만 사용할 수 있고 외부에서 사용할 수 없다.
기본값이 있는 매개변수(Parameter)
매개변수 선언 시 값을 대입하면 그 값은 기본값이 되고, 호출 시 인수(argument)가 전달되지 않으면 대입해놓은 기본값을 사용한다.
기본값을 선언한 매개변수 뒤에 기본값이 없는 매개변수는 선언할 수 없다.
예제
순서 1. parameter의 기본값이 있는 함수를 정의한다. (address: 기본값이 있는 매개변수)
순서 2. if else 문을 사용하여 조건문을 생성한다. 조건은 address != None
순서 3. 조건이 True인 block 내 명령문을 실행한다.
def greeting5(name, age, address=None):
greeting = None
if not address: # address != None
greeting = f"{age}세의 {name}님 환영합니다."
else: # address == None
greeting = f"{age}세의 {address}사는 {name}님 환영합니다."
return greeting
정의한 함수를 호출한다.
name, age: 기본값이 없는 매개변수 => required parameter (필수 입력)
address: 기본값이 있는 매개변수 => optional parameter (선택 입력)
greeting5("손흥민", 30)
greeting5("이강인", 21, "한국")
[실행결과]
'30세의 손흥민님 환영합니다.'
'21세의 한국사는 이강인님 환영합니다.'
키워드 인수(Keyword Argument)
키워드 인수는 함수 호출할 때 인수(argument)를 '변수명=전달할 값' 형식으로 선언해서 어떤 값을 전달할 것인지 정의한다.
키워드 인수를 사용하면 순서와 상관없이 호출할 수 있다.
예제
순서 1. 키워드 인수를 사용하여 순서대로 호출한다.
순서 2. 키워드 인수를 사용하여 순서에 상관없이 호출한다.
순서 3. 키워드 인수와 위치 인자 (positional argument) 둘 다 사용하여 호출한다..
위치 인자 (positional argument)는 키워드 인자가 아닌 인자를 말한다.
함수를 호출할 떄 전달되는 값이 매개변수에 순서대로 전달되는 인수를 의미한다
greeting5(name='손흥민', age=30, address='토트넘')
greeting5(age=30, address='토트넘', name='손흥민')
greeting5('손흥민', address='토트넘', age=30)
[실행결과]
'30세의 토트넘사는 손흥민님 환영합니다.'
'30세의 토트넘사는 손흥민님 환영합니다.'
'30세의 토트넘사는 손흥민님 환영합니다.'
가변 인자(*변수명/**변수명)
가변 인자는 인수의 개수를 정하지 않고 받을 경우 사용한다.
하나의 함수에 * 변수명, ** 변수명 각각 한 개씩만 선언할 수 있고 마지막 변수로 선언되어야 한다.
매개변수 앞에 * 를 붙이는 경우 전달된 값들은 tuple로 받아서 처리한다.
매개변수 앞에 ** 를 붙이는 경우 전달된 값들은 dictionary로 받아서 처리하고, 키=값 형식으로 인수를 전달해야 한다.
예제 1
순서 1. 매개변수가 *변수명인 함수를 정의한다.
순서 2. 문을 사용하여 반복문을 생성한다.
순서 3. return 값을 반환한다.
def sum_func(*itr):
ret = 0
for i in itr:
ret += i
return ret
정의한 함수를 호출한다.
print(sum_func(1, 2))
print(sum_func(1, 2, 3, 4, 5, 6, 7, 8))
print(sum_func(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21, 54, 68, 34, 820))
print(sum_func())
[실행결과]
3
36
1052
0
예제 2
순서 1. 매개변수가 **변수명인 함수를 정의한다.
순서 2. 매개변수의 타입과 대입한 값을 출력한다.
def print_info(**info):
print(type(info), '\n', info)
정의한 함수를 호출한다.
print_info(name='홍길동',
age=20,
address='서울',
weight=67.8,
tall=182.3,
blood_type='B')
[실행결과]
<class 'dict'>
{'name': '홍길동', 'age': 20, 'address': '서울', 'weight': 67.8, 'tall': 182.3, 'blood_type': 'B'}
예제 3
*변수명과 **변수명을 각각 하나씩 선언할 경우 (*변수명을 먼저 선언)
순서 1. 매개변수가 *변수명과 **변수명인 함수를 정의한다.
순서 2. 매개변수의 타입과 대입한 값을 출력한다.
def exam(*args, **kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
정의한 함수를 호출한다.
exam3(1, 2, 3, 4, a=1, b=2, c=3)
[실행결과]
<class 'tuple'> (1, 2, 3, 4)
<class 'dict'> {'a': 1, 'b': 2, 'c': 3}
예제 4
일반 매개변수와 가변 인자를 같이 선언할 경우 (일반 매개변수를 먼저 선언)
순서 1. 매개변수가 일반 매개변수, *변수명, **변수명인 함수를 정의한다.
순서 2. 매개변수에 대입한 값을 출력한다.
def exam4(v1, v2, v3, *args, **kwargs):
print(v1, v2, v3)
print(args)
print(kwargs)
정의한 함수를 호출한다.
exam4(10, 20, 30)
print("-----------------------")
exam4(10, 20, 30, 100, 200, 300)
print("-----------------------")
exam4('a', 'b', 'c', 1, 2, 3, 4, 5, 6, 7, a=100, b=200, c=300)
[실행결과]
10 20 30
()
{}
-----------------------
10 20 30
(100, 200, 300)
{}
-----------------------
a b c
(1, 2, 3, 4, 5, 6, 7)
{'a': 100, 'b': 200, 'c': 300}
최소한 3개의 위치 변수(positional argument)는 전달해야 한다.
return value
return value는 함수로부터 전달되는 값을 결과(result) 또는 반환 값(return value)라고 한다.
함수 구현부에 return [값] 구문을 사용할 경우 'return'만 선언되면 함수를 정상적으로 끝내고 호출한 곳으로 돌아가지만, 'return 값'이 선언되면 호출한 곳으로 값을 가지고 돌아간다.
값을 생략했을 경우 return None 즉 None을 반환한고, return 구문을 생략한 경우 return None이 default 실행된다.
여러 개의 값을 return 하는 경우 자료구조로 묶어서 전달해야 하고, 함수는 한 개의 값만 반환할 수 있다.
예제
순서 1. 매개변수가 있는 함수를 정의한다.
순서 2. if 문을 사용하여 조건문을 생성한다. 조건은 n2 == 0
순서 3. 'n1 / n2'을 반환(return)한다.
def divide(n1, n2):
if not n2:
print("n2는 0 이외에 숫자를 넣어주세요.")
return n1 / n2
정의한 함수를 호출한다.
v = divide(10, 5)
print(v)
s = divide(10, 0)
print(s)
[실행결과]
2.0
n2는 0 이외에 숫자를 넣어주세요.
None
'Back-End > Python' 카테고리의 다른 글
[Python] 객체지향 프로그래밍(OOP) (2) | 2022.09.26 |
---|---|
[Python] 일급 (시민) 객체(first-class citizen) (2) | 2022.09.25 |
[Python] 함수(Function) 정의 및 호출 기본 (0) | 2022.09.24 |
[Python] 컴프리헨션(Comprehension) (0) | 2022.09.24 |
[Python] range 함수 (2) | 2022.09.23 |