하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합으로, 하나의 단위를 말한다.
def 함수명(매개변수):
<수행할 문장1>
<수행할 문장2>
...
def hello():
print("안녕!")
print("또 만나요!")
hello()# 안녕! 또 만나요!def bus_rate(age):
if age > 65:
print("무료로 이용하세요")
elif age > 20:
print("성인입니다.")
else:
print("청소년입니다")
bus_rate(27)# 성인입니다.
bus_rate(10)# 청소년입니다.
bus_rate(72)# 무료로 이용하세요.
💡 함수를 사용하는 이유
반복적인 프로그래밍을 피할 수 있기 때문이다. 프로그램에서 특정 작업을 여러 번 반복해야 할 때는 해당 작업을 수행하는 함수를 작성하면 프로그램이 필요할 때마다 작성한 함수를 호출하면 해당 작업을 반복해서 수행할 수 있습니다.
프로그램을 여러 개의 함수로 나누어 작성하면, 모듈화로 인해 전체적인 코드의 가독성이 좋아지고, 프로그램에 문제가 발생하거나 기능의 변경이 필요할 때에도 손쉽게 유지보수를 할 수 있습니다.
매개변수(parameter)는 함수에 입력으로 전달된 값을 받는 변수를 의미하고 인수(arguments)는 함수를 호출할 때 전달하는 입력값을 의미한다.
def add(a, b): # a, b는 매개변수
return a+b
print(add(3, 4)) # 3, 4는 인수
함수를 호출할 때 매개변수를 지정할 수도 있다. 순서에 상관없이 사용할 수 있다는 장점이 있다.
def cal(a, b):
return a + 2 * b
print(cal(a=3, b=5))
print(cal(b=5, a=3))
매개변수에 미리 값을 넣어 초깃값을 미리 설정해 줄 수 있다. 함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해 두면 유용하다.
def cal2(a, b=3):
return a + 2 * b
print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))
args처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 여러개의 인수를 하나의 매개변수로 받을 수 있다.
# 여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 args라는 이름을 사용. arguments라는 뜻!
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재')
키워드 파라미터를 사용할 때는 매개변수 앞에 별 두 개(**)를 붙인다. 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장된다.
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='bob') # {'name':"bob"}
get_kwargs(name='john', age='27') # {'name':"john", "age":27}