29. 함수 30.함수의 위치인수

Joy·2020년 3월 11일
0

함수 만들기/호출

def 함수이름():
(들여쓰기) 코드

함수()

매개변수 사용

def 함수이름(매개변수1, 매개변수2):
코드

예시) 함수만들기

>>> def add(a, b):
...     print(a + b)
...

호출

>>> add(10, 20)
30

괄호 안에 변수를 매개변수(parameter)
입력하는 값을 인수(argument)

반환

def 함수이름(매개변수):
return 반환값 , 반환값2

(return에 값을 지정하지 않으면 None을 반환
return으로 반환하는 값은 반환값이라고 하며 함수를 호출해준 바깥에 결과를 알려주기 위해 사용

변수에 함수 저장해서 리턴값을 저장할 수 있음.

문제: 사칙 연산 함수 만들기

표준 입력으로 숫자 두 개가 입력됩니다. 다음 소스 코드를 완성하여 두 숫자의 덧셈, 뺄셈, 곱셈, 나눗셈의 결과가 출력되게 만드세요. 이때 나눗셈의 결과는 실수라야 합니다.

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('덧셈: {0}, 뺄셈: {1}, 곱셈: {2}, 나눗셈: {3}'.format(a, s, m, d))

30. 위치인수, 리스트 사용

함수에서 위치 인수, 키워드 인수를 사용하는 방법과 리스트, 딕셔너리 언패킹(unpacking)을 활용하는 방법

positional argument

함수에 인수를 순서대로 넣는 방식. 인수의 위치가 정해져 있음

언패킹 사용

함수(리스트)
함수(
튜플)

>> x = [10, 20, 30]
>> print_numbers(*x)
10
20
30


리스트(튜플) 앞에 *를 붙이면 언패킹(unpacking)이 되어서 print_numbers(10, 20, 30)과 똑같은 동작

가변인수 variable argument

인수의 개수가 정해지지 않은

def 함수이름(*매개변수):
코드

예)

>>> def print_numbers(*args):
...     for arg in args:
...         print(arg)
...
>>> print_numbers(10)
10
>>> print_numbers(10, 20, 30, 40)
10
20
30
40
>>> x = [10]
>>> print_numbers(*x)
10
>>> y = [10, 20, 30, 40]
>>> print_numbers(*y)
10
20
30
40

키워드 인수

인수의 순서와 용도를 매번 기억하지 않도록 키워드 인수(keyword argument)

함수(키워드=값)

>> def personal_info(name, age, address):
...     print('이름: ', name)
...     print('나이: ', age)
...     print('주소: ', address)
>> personal_info(name='홍길동', age=30, address='서울시 용산구 이촌동')
이름:  홍길동
나이:  30
주소:  서울시 용산구 이촌동

딕셔너리 언패킹으로 값넣기

함수(**딕셔너리)

별표 두개 사용 이유: 딕셔너리는 키-값 쌍 형태로 값이 저장되어 있기 때문

예)

>>> def personal_info(name, age, address):
...     print('이름: ', name)
...     print('나이: ', age)
...     print('주소: ', address)
...

딕셔너리에 '키워드': 값 형식으로 인수를 저장하고, 앞에 **를 붙여서 함수에 넣어줍

>>> x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(**x)
이름:  홍길동
나이:  30
주소:  서울시 용산구 이촌동

함수 인수 생략, 매개변수 초기값

def 함수이름(매개변수=값):
코드

초깃값이 지정된 매개변수는 뒤쪽에 몰아써야 함.

문제: 가장 낮은 점수, 높은 점수와 평균 점수를 구하는 함수 만들기

표준 입력으로 국어, 영어, 수학, 과학 점수가 입력됩니다. 다음 소스 코드를 완성하여 가장 높은 점수, 가장 낮은 점수, 평균 점수가 출력되게 만드세요. 평균 점수는 실수로 출력되어야 합니다.

korean, english, mathematics, science = map(int, input().split())

def get_min_max_score(*scrs):
	return min(*scrs), max(*scrs)
def get_average(**kyscrs):
	return sum(kyscrs.values())/len(kyscrs)


min_score, max_score = get_min_max_score(korean, english, mathematics, science)
average_score = get_average(korean=korean, english=english,
                            mathematics=mathematics, science=science)
print('낮은 점수: {0:.2f}, 높은 점수: {1:.2f}, 평균 점수: {2:.2f}'
      .format(min_score, max_score, average_score))
 
min_score, max_score = get_min_max_score(english, science)
average_score = get_average(english=english, science=science)
print('낮은 점수: {0:.2f}, 높은 점수: {1:.2f}, 평균 점수: {2:.2f}'
      .format(min_score, max_score, average_score))

get_average 함수는 인수를 키워드 인수로 넣고 있으므로 별 두개로

추가

funstion annotation

  • 함수의 매개변수와 반환값을 명시적으로 보여주는 기능

  • 주석이라 강제성 없음

  • 파라미터 마다 annotation 써서

  • 리턴값은 -> expression 형태로 써줌.

profile
roundy

0개의 댓글