Chapter 01. 함수
✔️함수란 무엇인가?
➰ 함수의 정의
입력 값을 가지고 어떤 일을 수행한 후 그 결과물을 내어 놓는 것
➰ 함수를 사용하는 이유
- 반복되는 부분이 있을 경우, '반복적으로 사용되는 가치 있는 부분'을 한 뭉치로 묶어 '어떤 입력값을 주었을 때 어떤 결과값을 리턴해준다' 식으로 함수 작성
- 작성한 프로그램을 기능 단위의 함수로 분리하여 프로그램 흐름을 일목요연하게 확인 가능
➰ 파이썬 함수의 구조
def 함수_이름 (매개변수):
수행할_문장1
수행할_문장2
def add(a,b):
return a + b
✅ def : 함수를 만들 때 사용하는 예약어
✅ return : 함수의 결괏값(리턴값)을 리턴하는 명령어
✔️매개변수의 다양한 활용
➰ 매개변수와 인수
📎 매개변수 : 함수에 입력으로 전달된 값을 받는 변수
📎 인수 : 함수를 호출할 때 전달하는 입력값
➰ 입력값과 리턴값에 따른 함수의 형태
1. 일반적인 함수
#함수 만들기
def 함수_이름(매개변수):
수행할_문장
...
return 리턴값
#함수 사용법
리턴값을_받을_변수 = 함수_이름(입력_인수1, 입력_인수2, ...)
#활용 예시
def add(a, b):
result = a + b
return result
a = add(3, 4)
print(a)
2. 입력값이 없는 함수
#함수 만들기
def 함수_이름():
return 리턴값
#함수 사용법
리턴값을_받을_변수 = 함수_이름()
#활용 예시
def say():
return 'Hi'
a = say()
print(a) # Hi
3. 리턴값이 없는 함수
#함수 사용법
함수_이름(입력_인수1, 입력_인수2, ...)
#활용 예시
def add(a, b):
print("%d, %d의 합은 %d입니다." %(a, b, a+b))
add(3,4)
# 3, 4의 합은 7입니다.
print(a)
# None
※ add 함수에는 따로 리턴값이 따로 없으므로 이와 같은 경우 함수 add는 리턴값으로 a 변수에 None을 리턴한다. 여기서 None은 리턴값이 없음을 의미한다.
4. 입력값도, 리턴값도 없는 함수
#함수 사용법
함수_이름()
#활용 예시
def say():
print('Hi')
say()
# Hi
➰ 입력 값이 몇 개가 될지 모를 경우
📎 사용법 : 매개변수 앞에 '*'을 붙여서 사용
📎 활용 사례
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
📎 print_kwargs : 입력받은 매개변수 kwargs (keyword arguments)를 출력하는 함수
📎 사용법 : 매개변수 별 2개(**)를 붙여서 사용
def print_kwargs(**kwargs):
print(kwargs)
📎 특징 : 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 Key = Value 형태의 입력값이 그 딕셔너리에 저장됨
➰ 매개변수에 초깃값 설정
📎 매개변수 초깃값 설정 예시
# man=True의 형태로 매개변수에 초깃값 설정
def say_myself(name, age, man=True):
print("나의 이름은 %입니다." %name)
print("나이는 %d살입니다." %age)
if man:
print("남자입니다.")
else:
print("여자입니다.")
# say_myself 함수 사용법
# 첫번째 사용법
say_myself("박응용", 27)
# 두번째 사용법
say_myself("박응용", 27, True)
# False일 경우 "여자입니다."가 출력
say_myself("박응선", 27, False)
📎 특징 : 초기화하고 싶은 매개변수는 항상 뒤쪽에 놓아야 함
✔️함수 안의 변수
➰ 함수 안에서 선언한 변수의 효력 범위
a = 1
def vartest(a):
a = a + 1
vartest(a)
print(a) # 1이 출력 됨.
함수 안에서 사용하는 매개변수는 함수 안에서만 사용하는 '함수만의 변수'이기 때문에 결괏값은 1이 나온다. 즉, def vartest(a)에서 입력값을 전달받는 매개변수 a는 함수 안에서만 사용하는 변수일 뿐, 함수 밖의 변수 a와는 전혀 상관없다.
def vartest(a):
a = a + 1
vartest(3)
print(a) # 오류 발생
※ print(a)에서 사용한 a 변수는 어디에도 선언되지 않았기 때문에 오류가 발생한다. 함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐, 함수 밖에서는 사용되지 않는다.
➰ 함수 안에서 함수 밖이 변수를 변경하는 방법
📎 return 사용하기
a = 1
def vartest(a):
a = a + 1
return a
a = vartest(a) # vartest(a)의 리턴값을 함수 밖의 변수 a에 대입
print(a)
📎 global 명령어 사용하기
a = 1
def vartest(a):
global a # 함수 밖의 a 변수를 직접 사용하겠다는 의미
a = a + 1
vartest()
print(a)
▶ 함수는 독립적으로 존재하는 것이 좋기 때문에 global 명령어는 사용하지 않는 것이 좋다.
📎 lambda 예약어
▶ def와 동일한 역할을 하는 예약어 lambda는 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 사용한다.
'''
# 람다 예약어 사용법
함수_이름 = lambda 매개변수1, 매개변수2, ... : 매개변수를_이용한_표현식
'''
# 예제
add = lambda a, b: a + b
result = add(3, 4)
print(result) # 7이 출력된다
참고 자료 : Do it! 점프 투 파이썬 전면 개정 2판
'Programming > Python' 카테고리의 다른 글
[파이썬 구조] 제어문 (0) | 2023.07.23 |
---|---|
[파이썬 기초] 자료형 (0) | 2023.07.16 |