프로그램의 흐름을 파악하기 쉽게 하기 위해서 함수를 사용한다.
>>> def add(a, b):
... return a+b
...
>>>
add함수 정의
>>> a = 3
>>> b = 4
>>> c = add(a, b)
>>> print(c)
7
add함수의 호출
매개변수와 인수
def add(a, b): # a, b는 매개변수
return a+b
print(add(3, 4)) # 3, 4는 인수
매개변수는 함수에 입력으로 전달된 값을 받는 변수
인수는 함수를 호출할 때 전달하는 입력값
1. 일반적인 함수
def add(a, b):
result = a + b
return result
a = add(3, 4)
print(a)
결과값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
2. 입력값이 없는 함수
>>> def say():
... return 'Hi'
...
>>>
>>> a = say()
>>> print(a)
Hi
결과값을 받을 변수 = 함수이름()
3. 결과값이 없는 함수
>>> def add(a, b):
... print("%d, %d의 합은 %d입니다." % (a, b, a+b))
...
>>> a = add(3, 4)
>>> print(a)
None
결과값은 return명령어로만 돌려받을 수 있다.
4. 입력값도 결과값도 없는 함수
>>> def say():
... print('Hi')
...
>>>
>>> say()
Hi
매개변수 지정하여 호출하기
>>> def add(a, b):
... return a+b
...
>>> result = add(b=5, a=3) # b에 5, a에 3을 전달
>>> print(result)
8
매개변수를 지정하는 경우 순서에 상관없이 사용 가능하다.
입력값의 개수를 모르는 경우
def 함수이름(*매개변수):
<수행할 문장>
...
>>> def add_many(*args):
... result = 0
... for i in args:
... result = result + i
... return result
...
>>>
*args처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어서 입력값의 개수를 자동으로 지정해준다.
>>> def add_many(*args):
... result = 0
... for i in args:
... result = result + i
... return result
...
>>>
>>> result = add_many(1,2,3)
>>> print(result)
6
>>> result = add_many(1,2,3,4,5,6,7,8,9,10)
>>> print(result)
55
>>> 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
키워드 파라미터 kwargs
>>> def print_kwargs(**kwargs):
... print(kwargs)
...
>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}
**kwargs처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장된다.
함수의 결과값은 하나
>>> def add_and_mul(a,b):
... return a+b, a*b
>>> result = add_and_mul(3,4)
>>> result1, result2 = add_and_mul(3, 4)
첫번째 result는 a+b와 a*b는 튜플값 하나인 (7,12)로 돌려준다.
하지만 두번째는 result1은 7이 되고 result2는 12가 된다.
return a+b
return a*b
return의 또 다른 쓰임새 => 함수를 빠져나가기 위한 방법
>>> def say_nick(nick):
... if nick == "바보":
... return
... print("나의 별명은 %s 입니다." % nick)
...
>>>
>>> say_nick('야호')
나의 별명은 야호입니다.
>>> say_nick('바보')
>>>
입력값으로 '바보'라는 값이 들어오면 문자열을 출력하지 않고 함수를 즉시 빠져나간다.
매개변수에 초기값 미리 설정하기 => 다른 형태로 함수의 인수를 전달하는 방법
def say_myself(name, old, man=True):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해 두면 유용하다.
def say_myself(name, man=True, old):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
27을 man 변수와 old 변수 중 어느 곳에 대입해야 할지 알 수 없어 오류가 발생한다.
따라서 초기화시키고 싶은 매개변수는 항상 뒤쪽에 놓아야 한다.
함수 안에서 선언한 변수의 효력 범위 => 함수 안에서 사용할 변수를 함수 밖에서도 사용하기 위한 방법
# vartest.py
a = 1
def vartest(a):
a = a +1
vartest(a)
print(a)
def vartest(a)에서 입력값을 전달받는 매개변수 a는 함수 안에서만 사용하는 변수이지 함수 밖의 변수 a가 아니다.
# vartest_error.py
def vartest(a):
a = a + 1
vartest(3)
print(a)
print(a)에서 입력받아야 하는 a 변수는 존재하지 않기 때문에 오류가 발생한다.
함수 안에서 함수 밖의 변수를 변경하는 방법
1. return 사용하기
# vartest_return.py
a = 1
def vartest(a):
a = a +1
return a
a = vartest(a)
print(a)
a = vartest(a)라고 대입하면 a가 vartest 함수의 결과값으로 바뀐다.
vartest 함수 안의 a 매개변수는 함수 밖의 a와는 다른 변수이다.
2. global 명령어 사용하기
# vartest_global.py
a = 1
def vartest():
global a
a = a+1
vartest()
print(a)
외부 변수에 종속적인 함수는 좋은 함수가 아니기 때문에, 함수는 독립적으로 존재하도록 해야한다.
global 명령어를 사용하는 것보다 return을 사용하는 것이 좋다.
lambda
lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다.
>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
>>> def add(a, b):
... return a+b
...
>>> result = add(3, 4)
>>> print(result)
7
lambda 함수는 return 명령어가 없어도 결과값을 돌려준다.
'Programming > Python' 카테고리의 다른 글
[파이썬] 15. 파일 읽고 쓰기 (0) | 2021.02.15 |
---|---|
[파이썬] 14. 사용자 입력과 출력 (0) | 2021.02.15 |
[파이썬] 조건문 정리 (0) | 2021.02.14 |
[파이썬] 12. for문 (0) | 2021.02.14 |
[파이썬] 11. while문 (0) | 2021.02.14 |