define : 정의하다
함수란 프로그래밍에서 하나의 목적을 행하기 위해 설계된 코드의 집합이라고 볼 수 있습니다.
선언 방법
필요한 함수가 없을때(append와 같은 함수들) 직접 함수를 만들거나,
특정 로직을 위해 기능들을 구현해서 함수로 묶을 수 있습니다.
# 함수 생성
def pick(item, ea):
"""무엇을 주었는지 알려주는 함수."""
print("나는 {}을(를) '{}'개 주웠다.".format(item, ea))
# 함수 실행
print(pick("연필", 2))
# 나는 연필을(를) '2'개 주었다. // 함수 안에 print가 있기때문
# None // return값이 없으므로
return - 반환할 값
return의 특징
# 함수 생성
def pick(item, ea):
"""무엇을 주웠는지 알려주는 함수."""
print("나는 {}을(를) '{}'개 주웠다.".format(item, ea))
# 함수 실행
print(pick("연필", 2))
# 결과
# 나는 연필을(를) '2'개 주었다. // 함수 안에 print가 있기때문
# None // return값이 없으므로
# ===============================
def greet(username):
"""아침 인사를 합니다."""
print("안녕하세요! {} 좋은 아침입니다.".format(username))
greet("한솔")
# 안녕하세요! 한솔 좋은 아침입니다.
# 위의 pick과 greet의 차이가 무슨차이냐면
# print(함수)로 실행한 것과 그냥 함수를 실행한 것의 차이입니다.
# print()에서 함수를 실행했으므로 함수에 따른 리턴값을 print해야되는데
# 값이 없으므로 none을 반환해서 출력한 경우고
# 아래는 그냥 greet("한솔")을 통해 함수자체를 실행해서 print가 실행됬지만
# 함수의 return값이 출력되야할 이유가 없기 때문에 구현된 함수의 기능만 나왔습니다.
# ===============================
def clean():
print("청소를 시작합니다.")
clean()
# 고정된 기능을 사용할땐 매개변수가 없어도 됩니다.
또 다른 예시
def func1():
return 1
return 2
return 3
print(func1())
# 1
# return이 시작된 순간 그 함수는 종료됩니다.
# 따라서 return 2,3은 의미없는 코드가 됩니다.
def func2():
for i in range(1, 10):
if i % 3 == 0:
# 3의 배수일때 중지 시키고싶다.
return # 해당함수에서 break로 반복문을 종료시키는 것과
# return시켜서 none을 반환하면서 함수를 종료시키는 것은 기능상 같습니다.
print(i)
할당과 값 반환
# 리턴값 예시
def func1():
pass
def func2():
print("hello world")
def func3():
return "hello world"
f1 = func1()
f2 = func2()
f3 = func3()
print(f1, f2, f3)
# 실행 결과
# hello world => f2 = func2()의 결과
# None None hello world => print(f1, f2, f3)의 결과
여기서 f2 = func2()의 결과로 print("hello world")가 출력되는 이유는
f2 = func2()라고 선언하는 것이 아니라
func2()의 결과(return)를 f2에 할당하는 것이기 때문입니다.
따라서, f2에 값을 할당하기위해 func2()함수를 한번 실행하고,
그때 print("hello world")가 실행되어 출력됩니다.
인자(arguments)
매개변수(parameters)
함수를 정의할 때 매개변수라고 부르고, 그 함수를 사용할때 매개변수의 위치에 들어온 값을 인자라고 부른다고 이해하면 됩니다.
즉, 매개변수 = 인자라고 이해하면 쉽습니다.
def 함수명(매개변수1 = 기본값1, 매개변수2 = 기본값2):
함수 실행 시 인자를 생략할 수 있으며 생략된 값은 기본값으로 설정됩니다
기본값이 존재하는 매개변수는 뒤에 배치해야 합니다.
예시1
def 함수명(매개변수1 = 기본값1, 매개변수2) # X
def 함수명(매개변수1, 매개변수2 = 기본값2) # O
예시2
# 함수 생성
def pick(item, ea = 1):
"""무엇을 주웠는지 알려준다."""
print("나는 {}을(를) '{}'개 주웠다.".format(item, ea))
print(1, 2, 3, 4, 5, sep='/')
pick("거미줄", 2) # 나는 거미줄을(를) '2'개 주웠다.
pick("나무판자") # 나는 나무판자을(를) '1'개 주웠다.
# 인자 강제 지정
pick(ea = 2, item = "다이아몬드") # 나는 다이아몬드을(를) '2'개 주웠다.
함수 실행 시 필요한 변수 영역(메모리 영역)이 따로 생성됩니다.
이 메모리 공간은 함수가 종료될 때 사라지며 따라서 남겨야하는 값이 있다면 return을 이용해야 합니다.
기본 파이썬의 메모리 공간을 global이라고 하고, 함수 실행시 생기는 메모리 공간을 local이라고 합니다.
이때, local영역과 global영역의 변수명은 따로 관리됩니다.
def count_negative(n_list):
"""음수가 몇개인지 카운트하는 함수"""
count = 0
for n in n_list:
if n < 0:
count += 1
return count
# main
n_list = [-3, -2, -1, 0, 1 , 2, 3, 4] #range(-3, 5)
count = count_negative(n_list)
print("{}의 음수 개수는 {}개다.".format(n_list, count))
# count_negative의 로컬 메모리내에서 사용된 count변수는 함수가 종료되면서 사라집니다.