PYTHON
함수 - 기본 개념, 위치 인수와 키워드 인수
yuurimingg
2023. 12. 27. 14:47
함수¶
출력 함수 만들기¶
함수 만들고 호출¶
In [1]:
def hello():
print("Hello, world!")
hello()
Hello, world!
In [4]:
bye()
def bye():
print("bye")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 bye()
3 def bye():
4 print("bye")
NameError: name 'bye' is not defined
-> 함수를 만들기 전에 함수를 먼저 호출하면 에러가 발생한다.
덧셈 함수 만들기¶
In [12]:
def add(a, b):
"""숫자 a와 b를 더한다"""
print(a + b)
add(2, 10)
add(10, 20)
print(add.__doc__) # 독스트링을 출력
12
30
숫자 a와 b를 더한다
함수의 결과를 반환하기¶
In [13]:
def add(a, b):
return a + b
result = add(10, 20)
print(result)
30
In [14]:
def one():
return 1
x = one()
print(x)
1
In [19]:
def not_ten(a):
if a == 10:
# return # None을 반환 즉 넘어간다?
return None
print(a,"입니다", sep = '')
not_ten(5)
not_ten(10)
5입니다
함수에서 값을 여러 개 반환¶
In [20]:
def add_sub(a, b):
return a + b, a - b
x, y = add_sub(20, 10)
print(x, y)
30 10
In [22]:
def one_two():
return [1, 2]
x, y = one_two()
print(x, y)
1 2
함수의 호출 과정 알아보기¶
In [24]:
def mul(a, b):
c = a * b
return c
def add(a, b):
c = a + b
print(c)
d = mul(a, b)
print(d)
x = 10
y = 20
add(x, y)
30
200
연습문제 : 몫과 나머지를 구하는 함수 만들기¶
다음 소스 코드를 완성하여 x를 y로 나누었을 때의 몫과 나머지가 출력되게 만드세요.
In [26]:
x = 10
y = 3
def get_quotient_remainder(a, b):
return divmod(a, b)
quotient, remainder = get_quotient_remainder(x, y)
print("몫 : {}, 나머지 : {}".format(quotient, remainder))
몫 : 3, 나머지 : 1
심사문제 : 사칙 연산 함수 만들기¶
표준 입력으로 숫자 두 개가 입력됩니다. 다음 소스 코드를 완성하여 두 숫자의 덧셈, 뺄셈,나눗셈의 결과가 출력되게 만드세요. 이때 나눗셈의 결과는 실수여야 합니다.
In [34]:
x, y = map(int, input().split())
def calc(a, b):
return a + b, a - b, a * b, a / b
a, s, m, d = calc(x, y)
print("덧셈 : {}, 뺄셈 : {}, 곱셈 : {}, 나눗셈 : {}". format(a, s, m, d))
10 20
덧셈 : 30, 뺄셈 : -10, 곱셈 : 200, 나눗셈 : 0.5
연습¶
In [61]:
operator = int(input("덧셈 : 1, 뺄셈 : 2, 곱셈 : 3, 나눗셈 : 4 : "))
x = int(input("첫 번째 값을 입력 : "))
y = int(input("두 번째 값을 입력 : "))
print('----------------------------------------------------')
lst_operator = ["+", "-", "*", "/"]
def calc(a, b, o):
if o == 1:
add = a + b
return add
elif o == 2:
sub = a - b
return sub
elif o == 3:
mul = a * b
return mul
elif o == 4:
div = a / b
return div
result = calc(x, y, operator)
print('입력 값 : {}, {}'.format(x, y))
print('결과 값 :', x, lst_operator[operator - 1], y, "=", result)
print('----------------------------------------------------')
덧셈 : 1, 뺄셈 : 2, 곱셈 : 3, 나눗셈 : 4 : 1
첫 번째 값을 입력 : 10
두 번째 값을 입력 : 20
----------------------------------------------------
입력 값 : 10, 20
결과 값 : 10 + 20 = 30
----------------------------------------------------
-> return을 한 번에 하면 X -> if, elif 조건문이 있기 때문에 마지막 한 번에 return 하면 해당 조건식 결과를 return 할 수 없다
In [ ]:
함수에서 위치 인수와 키워드 인수 사용하기¶
위치 인수와 리스트 언패킹 사용하기¶
위치 인수를 사용하는 함수를 만들고 호출하기¶
In [65]:
def print_numbers(a, b, c):
print(a)
print(b)
print(c)
print_numbers(10, 20, 30)
10
20
30
언패킹 사용하기¶
In [68]:
x = [10, 20, 30]
print_numbers(*x)
10
20
30
[10, 20, 30]
In [67]:
print_numbers(*[10, 20, 30])
print_numbers(*(10, 20, 30))
10
20
30
10
20
30
가변 인수 함수 만들기¶
In [72]:
def print_numbers(*args):
for arg in args:
print(arg)
print_numbers(10)
print('')
print_numbers(10, 20, 30, 40)
10
10
20
30
40
In [75]:
x = [10]
print_numbers(*x)
print('')
y = [10, 20, 30, 40]
print_numbers(*y)
10
10
20
30
40
In [82]:
def print_numbers(a, *args):
print(a)
print(*args)
print()
print_numbers(1)
print_numbers(1, 10, 20)
print_numbers(*[10, 20, 30])
1
1
10 20
10
20 30
키워드 인수 사용하기¶
In [87]:
def personal_info(name, age, address):
print()
print('이름 : ', name)
print('나이 : ', age)
print('주소 : ', address)
personal_info('홍길동', 24, '서울시 용산구 이촌동')
personal_info(name = '홍길동', age = 24, address = '서울시 용산구 이촌동')
personal_info(age = 24, name = '홍길동', address = '서울시 용산구 이촌동')
이름 : 홍길동
나이 : 24
주소 : 서울시 용산구 이촌동
이름 : 홍길동
나이 : 24
주소 : 서울시 용산구 이촌동
이름 : 홍길동
나이 : 24
주소 : 서울시 용산구 이촌동
키워드 인수와 딕셔너리 언패킹 사용하기¶
In [96]:
def personal_info(name, age, address):
print('이름 : ', name)
print('나이 : ', age)
print('주소 : ', address)
x = {'name' : '홍길동', 'age' : 24, 'address' : '서울시 용산구 이촌동'}
personal_info(**x)
이름 : 홍길동
나이 : 24
주소 : 서울시 용산구 이촌동
In [99]:
x = {'name' : '홍길동', 'old' : 24, 'address' : '서울시 용산구 이촌동'}
personal_info(**x)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[99], line 2
1 x = {'name' : '홍길동', 'old' : 24, 'address' : '서울시 용산구 이촌동'}
----> 2 personal_info(**x)
TypeError: personal_info() got an unexpected keyword argument 'old'
-> key와 함수의 매개변수가 같아야 한다(갯수도)
In [100]:
x = {'name' : '홍길동', 'old' : 24, 'address' : '서울시 용산구 이촌동'}
personal_info(*x)
# *를 한 번만 사용하면 key값이 나오고 **을 사용하면 value값이 나온다
이름 : name
나이 : old
주소 : address
In [104]:
def personal_info(**kwargs):
print()
for kw, arg in kwargs.items():
print(kw, ':', arg, sep = '')
personal_info(name = '홍길동')
personal_info(name = '홍길동', age = 30, address = '서울시 용산구 이촌동')
name:홍길동
name:홍길동
age:30
address:서울시 용산구 이촌동
In [106]:
x = {'name' : '홍길동'}
personal_info(**x)
y = {'name' : '홍길동', 'old' : 24, 'address' : '서울시 용산구 이촌동'}
personal_info(**y)
name:홍길동
name:홍길동
old:24
address:서울시 용산구 이촌동
In [109]:
def personal_info(**kwargs):
print()
if 'name' in kwargs:
print('이름', kwargs['name'])
if 'age' in kwargs:
print('나이', kwargs['age'])
if 'address' in kwargs:
print('주소', kwargs['address'])
personal_info(name = '홍길동')
personal_info(name = '홍길동', age = 30, address = '서울시 용산구 이촌동')
이름 홍길동
이름 홍길동
나이 30
주소 서울시 용산구 이촌동
In [113]:
def custom_print(*args, **kwargs):
print(*args, **kwargs)
custom_print(1, 2, 3, sep = ":", end = '')
1:2:3
매개변수에 초깃값 지정하기¶
In [117]:
def personal_info(name, age, address = '비공개'):
print('이름 : ', name)
print('나이 : ', age)
print('주소 : ', address)
print()
personal_info('홍길동', 30)
personal_info('홍길동', 30, '서울시 용산구 이촌동')
이름 : 홍길동
나이 : 30
주소 : 비공개
이름 : 홍길동
나이 : 30
주소 : 서울시 용산구 이촌동
In [121]:
def personal_info(name = '비공개', age = 0, address = '비공개'):
print('이름 : ', name)
print('나이 : ', age)
print('주소 : ', address)
personal_info()
이름 : 비공개
나이 : 0
주소 : 비공개
연습문제 : 가장 높은 점수를 구하는 함수 만들기¶
다음 소스 코드를 완성하여 가장 높은 점수가 출력되게 만드세요.
In [123]:
korean, english, mathematics, science = 100, 86, 81, 91
def get_max_score(*args):
return max(args)
max_score = get_max_score(korean, english, mathematics, science)
print('높은 점수 : ', max_score)
print()
max_score = get_max_score(english, science)
print('높은 점수 : ', max_score)
높은 점수 : 100
높은 점수 : 91
심사문제 : 가장 낮은 점수, 높은 점수와 평균 점수를 구하는 함수 만들기¶
표준 입력으로 국어, 영어, 수학, 과학 점수가 입력됩니다. 다음 소스 코드를 완성하여 가장 높은 점수, 가장 낮은 점수, 평균 점수가 출력되게 만드세요. 평균 점수는 실수로 출력되어야 합니다.
In [149]:
korean, english, mathematics, science = map(int, input().split())
def get_min_max_score(*args):
print()
min_sco = min(args)
max_sco = max(args)
return min_sco, max_sco
def get_average(**kwargs):
# val = kwargs.values()
# avg = sum(val) / len(val)
add = 0
cnt = 0
for kw, arg in kwargs.items():
add += arg
cnt += 1
avg = add / cnt
return avg
min_score, max_score = get_min_max_score(korean, english, mathematics, science)
averge_score = get_average(korean = korean, english = english, mathematics = mathematics, science = science)
print('낮은 점수 : {:.2f}, 높은 점수 : {:.2f}, 평균 점수 : {:.2f}'.format(min_score, max_score, averge_score))
min_score, max_score = get_min_max_score(english, science)
averge_score = get_average(english = english, science = science)
print('낮은 점수 : {:.2f}, 높은 점수 : {:.2f}, 평균 점수 : {:.2f}'.format(min_score, max_score, averge_score))
89 92 73 83
낮은 점수 : 73.00, 높은 점수 : 92.00, 평균 점수 : 84.25
낮은 점수 : 83.00, 높은 점수 : 92.00, 평균 점수 : 87.50