Wisdom’s Cloud
[PYTHON] 4. 함수 본문
함수
-
반복되는 부분이 있을 경우 '반복적으로 사용되는 가치 있는 부분'을 한 뭉치로 묶어서 '어떤 입력값을 주었을 때 어떤 결과값을 돌려준다'라는 식으로 함수를 작성한다.
-
또한 자신이 만든 프로그램을 함수화하면 프로그램의 흐름도 잘 파악할 수 있고 오류가 어디에서 나는지도 바로 알아차릴 수 있기 때문에 함수를 사용한다.
def 함수 이름(매개 변수):
수행할 문장1
수행할 문장2
···
-
매개변수와 인수
# 매개변수(parameter)는 함수에 입력으로 전달된 값을 받는 변수를 의미
# 인수(arguments)는 함수를 호출할 때 전달하는 입력값을 의미
>>> def add(a, b):
... return a + b
...
>>> print(add(3, 4))
# a와 b는 매개변수, 3과 4는 인수
-
입력값과 결괏값에 따른 함수의 형태
# 일반적인 함수
>>> def add(a, b):
... result = a + b
... return result
...
>>> a = add(3, 4)
>>> print(a)
7
# 입력값이 없는 함수
>>> def say():
... return 'Hi'
...
>>> a = say()
>>> print(a)
Hi
# 결괏값이 없는 함수
>>> def add(a, b):
... print("%d, %d의 합은 %d입니다." %(a, b, a+b))
...
>>> add(3, 4)
3, 4의 합은 7입니다.
# 입력값도 결괏값도 없는 함수
>>> def say():
... print('Hi')
...
>>> say()
Hi
-
매개변수 지정하여 호출하기
>>> def add(a, b):
... return a+b
...
>>> result = add(a=3, b=7)
>>> print(result)
10
>>> result = add(b=5, a=3)
>>> print(result)
8
# 매개변수를 지정하면 순서에 상관없이 사용할 수 있다는 장점이 있다.
-
입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?
>>> 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
# *args처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 주기 때문에
# 위에서 만든 add_many 함수는 입력값이 몇 개이든 상관이 없다.
>>> 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
# add_mul 함수는 여러 개의 입력값을 의미하는 *args 매개변수 앞에 choice 매개변수가 추가되어 있다.
-
함수의 결괏값은 언제나 하나이다
>>> def add_and_mul(a, b):
... return a+b, a*b
...
>>> result = add_and_mul(3, 4)
# result는 (7, 12)라는 튜플 값을 갖게 되기 때문에 오류가 발생하지 않는다.
>>> result1, result2 = add_and_mul(3, 4)
# result1은 7이 되고 result2는 12가 된다.
>>> def add_and_mul(a, b):
... return a+b
... return a*b
...
>>> result = add_and_mul(2, 3)
>>> print(result)
5
# 함수는 return문을 만나는 순간 결괏값을 돌려준 다음 함수를 빠져나가기 때문에
# 두 번째 return문인 return a*b는 실행되지 않는다.
-
매개변수에 초깃값 미리 설정하기
>>> def say_myself(name, old, man=True):
... print("나의 이름은 %s입니다." %name)
... print("나이는 %d살입니다." %old)
... if man:
... print("남자입니다.")
... else:
... print("여자입니다.")
...
>>> say_myself("박응용", 27)
나의 이름은 박응용입니다.
나이는 27살입니다.
남자입니다.
>>> say_myself("박응용", 27, True)
나의 이름은 박응용입니다.
나이는 27살입니다.
남자입니다.
>>> say_myself("박응선", 27, False)
나의 이름은 박응선입니다.
나이는 27살입니다.
여자입니다.
>>> def say_myself(name, man=True, old):
... print("나의 이름은 %s입니다." %name)
... print("나이는 %d살입니다." %old)
... if man:
... print("남자입니다.")
... else:
... print("여자입니다.")
...
>>> say_myself("박응용", 27)
SyntaxError: non-default argument follows default argument
# 위 오류 메시지는 초깃값을 설정해 놓은 매개변수 뒤에 초깃값을 설정해 놓지 않은 매개변수는 사용할 수 없다는 뜻이다.
# 즉 매개변수로 (name, olde, man=True)는 되지만 (name, man=True, old)는 안 된다는 것이다.
# 초기화시키고 싶은 매개변수를 항상 뒤쪽에 놓아야 한다.
-
함수 안에서 선언한 변수의 효력 범위
>>> def vartest(a):
... a = a + 1
...
>>> vartest(3)
>>> print(a)
# vartest(3)을 수행하면 vartest 함수 안에서 a는 4가 되지만, 함수를 호출하고 난 뒤에 print(a) 문장은 오류가 발생하게 된다.
# 그 이유는 print(a)에서 입력받아야 하는 a 변수를 어디에서도 찾을 수가 없기 때문이다.
# 즉 함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다.
# return 사용하기
>>> a = 1
>>> def vartest(a)
... a = a + 1
... return a
...
>>> a = vartest(a)
>>> print(a)
# vartest(a)의 결과값을 함수 밖의 변수 a에 대입한다.
# global 명령어 사용하기
>>> a = 1
>>> def vartest()
... global a
... a = a + 1
...
>>> vartest()
>>> print(a)
# global a를 사용하여 함수 안에서 함수 밖의 a 변수를 직접 사용한다.
# 함수는 독립적으로 존재하는 것이 좋기 때문에 global 명령어를 사용하는 방법은 피하고 return을 사용한다.
-
lambda
lambda 매개변수1, 매개변수2, ... : 매개변수를 사용한 표현식
# lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다.
# 보통 함수를 한 줄로 간결하게 만들 때 사용한다.
>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
# lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려준다.
'PYTHON' 카테고리의 다른 글
[PYTHON] 6. 파일 읽고 쓰기 (0) | 2021.02.16 |
---|---|
[PYTHON] 5. 사용자 입력과 출력 (0) | 2021.02.16 |
[PYTHON] 3. 파이썬 제어문 (0) | 2021.01.08 |
[PYTHON] 2. 파이썬 자료형 (0) | 2021.01.08 |
[PYTHON] 1. 파이썬의 소개와 설치 (0) | 2020.12.30 |