본문 바로가기
● 알고리즘, 자료구조/2019 알고리즘

함수

by 0ver-grow 2019. 9. 24.
반응형

참고사이트 점프 투 파이썬

def add(a, b):  # a, b는 매개변수
    return a+b

print(add(3, 4))  # 3, 4는 인수

매개변수는 함수에 입력으로 전달된 값을 받는 변수
인수는 함수를 호출할 때 전달하는 입력값

함수는 들어온 입력값을 받아 어떤 처리를 하여 적절한 결괏값을 돌려준다.
입력값 ---> 함수 ----> 결괏값

입력값이 없는 함수

매개변수가 비어있다면?

>>> def say(): 
...     return 'Hi' 
... 

>>> a = say()
>>> print(a)
Hi

매개변수 부분을 나타내는 함수 이름 뒤의 괄호 안이 비어있으면 입력값이 없다는 것
그러나 결괏값으로 Hi라는 문자열을 돌려준다

결과값 return이 없는 함수

호출해도 돌려주는 값이 없다

>>> def add(a, b): 
...     print("%d, %d의 합은 %d입니다." % (a, b, a+b))
... 
변수를 따로 지정하지 않고 바로 함수명에 인자값을 넣어서 사용한다
>>> add(3, 4)
3, 4의 합은 7입니다.

만약 변수에 사용한다면...
>>> a = add(3, 4)
>>> print(a)
None # None이란 거짓을 나타내는 자료형

print문은 함수의 구성 요소 중 하나인 <수행할 문장>에 해당하는 부분일 뿐.
결괏값은 오직 return 명령어로만 돌려받을 수 있다.

 

입력값도 결괏값도 없는 함수

입력값도 결괏값도 없는 함수 역시 존재한다. 다음 예를 보자.

>>> def say(): 
...     print('Hi')
... 
>>>

입력 인수를 받는 매개변수도 없고 return문도 없으니 입력값도 결괏값도 없는 함수이다.
이 함수를 사용하는 방법은 단 한 가지이다.

>>> say()
Hi

즉 입력값도 결괏값도 없는 함수는 다음과 같이 사용한다.

함수이름()

입력값이 미정일때는?

def 함수이름(*매개변수): 
    <수행할 문장>
    ...

입력받은 모든 인자를 다 더하는 함수를 만들어보자
매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다.

>>> def add_many(*args): 
...     result = 0 
...     for i in args: 
...         result = result + i 
...     return result 
... 

덧셈, 곱셈 함수구현

>>> def add_mul(choice, *args): 
...     if choice == "add": 
...         result = 0 
...         for i in args: 
...             result = result + i 
...     elif choice == "mul": 
...         result = 1 
...         for i in args: 
...             result = result * i 
...     return result 
... 

>>> result = add_mul('add', 1,2,3,4,5)
>>> print(result)
15
>>> result = add_mul('mul', 1,2,3,4,5)
>>> print(result)
120

만약에 매개변수 이름앞에 **이 붙으면?

딕셔너리로 만들어진다.

>>> def print_kwargs(**kwargs):
...     print(kwargs)
...

>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}

 

하나의 함수에 2개의 출력값(return문)을 만들자

>>> def add_and_mul(a,b): 
...     return a+b, a*b

result = add_and_mul(3,4)
결과값은 7,12

 

튜플값의 2개의 변수에 저장하고 싶다면

 result1, result2 = add_and_mul(3, 4)
 result1은 7
 result2은 12

그러나 다음처럼 리턴문을 2개만든다면?

>>> def add_and_mul(a,b): 
...     return a+b 
...     return a*b 
... 

이 함수는 하단 함수와 동일하다
>>> def add_and_mul(a,b): 
...     return a+b 

함수는 return문을 만나는 순간 결괏값을 돌려준 다음 함수를 빠져나가기 때문

continue처럼 쓸 수 있는 return

>>> def say_nick(nick): 
...     if nick == "바보": 
...         return 
...     print("나의 별명은 %s 입니다." % nick)
... 

만약에 입력값으로 '바보'라는 값이 들어오면 문자열을 출력하지 않고 함수를 즉시 빠져나간다.

>>> say_nick('야호')
나의 별명은 야호입니다.
>>> say_nick('바보')
>>>

 

반응형