함수 응용이다.
두달 반만에 오랜만에 공부했다.
시작
1. 하나의 변수, 여러개의 리턴값
#함수 호출시 입력 파라미터값을 지정하여 함수를 호출하는 예제
def my_func(id_, name_, strength):
return id_, name_, strength
result = my_func("id", "name", "str")
print(result, type(result))
#('id', 'name', 'str') <class 'tuple'>
#변수 1개 - 리턴값 여러개 > 튜플 리턴
my_func()에 3개의 파라미터가 있고
result = my_func( ... ) 로 3개의 파라미터를 온전히 던져준다.
return 또한 들어온 값 그대로 3개의 값을 돌려준다.
이때 돌아온 리턴값의 값과 타입을 확인해보면
( ... ) 로 둘러쌓인 튜플의 형태로 돌아온다.
즉 하나의 변수에 여러개의 리턴값을 넣으면 '하나의 튜플'이 리턴된다고 보면 된다.
2. n개의 변수, n개의 리턴값
def my_func(id_, name_, strength):
return id_, name_, strength
a, b, c = my_func("aaa", "bbb", "ccc")
print("a - ", a, " b - ", b, " c - ", c, type(a))
#a - aaa b - bbb c - ccc <class 'str'>
#변수 n개 - 리턴값 n개 > 각각 할당
'''
d, e = my_func(1, 2, 3)
print(d, e)
-> Error!!!
'''
함수는 위와 동일하고
기존에는
result = my_func( ... )
에서
a, b, c = my_func( ... ) 로 변경되었다.
각각 파라미터값으로 aaa, bbb, ccc 값을 던져 줫고
리턴된 형태는
a - aaa, b - bbb, c - ccc
에 str 형식으로 리턴 되었다.
튜플을 각각 할당해준것과 동일한 효과로 만약
파라미터값으로 int형 값을 던져주면 리턴값도 int로 돌아온다.
단 예외적으로
리턴되는 개수와, 할당을 받을 변수의 개수가 다르면 에러가 발생한다. 주의.
3. 디폴트 파라미터
디폴트 파라미터는
함수를 선언할 때 default 값을 정해둔 변수를 파라미터로 둔 것이다.
def calc_tax( price, operator = 1.1):
supply_value = round(price / operator)
vat = price - supply_value
return supply_value, vat
result = calc_tax(110000)
print(result)
#(100000, 10000)
'''
operator - 디폴트 파라미터
-> 디폴트 파라미터 자리에 함수 호출시 파라미터값을 전달해주면 그 값으로 변경
round() - 반올림 함수
'''
위의 코드에서
operator 는 디폴트 파라미터로
result = calc_tax(110000) 에서
파라미터를 하나만 주었지만 알아서 operator = 1.1로 받아서 함수를 실행하는것을 볼 수 있다.
위의 상황은 부가세가 10%가 고정이라는 전제하지만 혹시라도 부가세가 달리 계산되는 경우
해당 파라미터값을 직접 선언해주면 넘어간 값으로 계산된다.
예를들어 result = calc_tax(110000, 2.0)
을 해주면
result -> (55000, 55000) 으로 나올 것이다.
round( ... ) - 반올림 함수
4. 가변길이 파라미터
가변길이 파라미터란
파라미터의 개수가 일정하지 않을때 쓰는 파라미터 선언 방식이다.
사용법은 *변수명 으로 앞에 *을 붙여서 사용한다.
def my_func(*a):
n = 0
for i in a:
n += i
return n;
a = my_func(1, 1, 1 ,1)
print(a)
# 4
b = my_func(1, 2, 3, 4, 5, 6, 7, 8, 9)
print(b)
# 45
*a 로 가변길이 파라미터를 선언해주고
파라미터가 넘어온 값의 합을 리턴하는 함수이다.
함수 4개가 넘어가나, 9개가 넘어가나 일정하게 계산해서 넘겨준다.
my_func(1,1,1,1,) 이나 my_func(1,2,3,4,5,6,7,8,9)는 즉
튜플의 형태로 넘어간다고 할 수 있다.
그러므로 my_func(*a)에서 a는 튜플로 취급하여 똑같이 다뤄주면 된다.
아래는 파라미터의 개수와 넘어온 값들의 홀수의 합을 리턴하는 함수이다.
#가변길이 입력 파라미터 값들을 함수로 넘겨서 해당 파라미터의 개수와 홀수들의 합 구하는 함수
def odd_func(*a):
sum = 0
count = 0
for i in a:
count += 1
if(i%2 != 0):
sum += i
return sum, count
c = odd_func(1,2,3,4,5,6,7,8,9)
print(c)
#(25, 9)
d = odd_func(1,2,3,4,5,6,7,8,9,10,11)
print(d)
#(36, 11)
'Language > Python' 카테고리의 다른 글
[Python] 클래스 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.05.17 |
---|---|
[Python] 랜덤 모듈 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.05.17 |
[Python] 함수(1) / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.02.24 |
[Python] dict, 사전, 삽입, 수정, 삭제 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.02.22 |
[Python] 리스트 comprehension (2)/ 예제로 공부하는 Python 100 문제풀이 (0) | 2022.02.17 |
댓글