일정한 작업을 수행하는 코드블럭이다.
함수는,
1. 반복되어 계속 사용되는 코드들을 함수로 정의하면 효과적으로 사용할 수 있고
2. 함수로 정리하게 되면 가독성을 높이기 때문에
사용한다.
수학의 함수와 동일하게, 인풋이 있으면 아웃풋이 있는 간단한 구조이다.
파이썬 함수에서는 인풋을 'parameter', 아웃풋은 'return' 값이라고 한다.
def 키워드를 사용하여 정의하며, 아래와 같은 문법을 갖는다.
def 함수명(parameter):
sentence1
sentence2
...
sentence-n
[return]
parameter and return is optional. There can be a function that doesnt have a input parameter, and also the return value as well.
return값은 함수에서 해당 함수를 호출한 주체(invoker)에게 결과값(output)을 보내주는 것이다.
def is_prime(num):
#1 혹은 그 이하이면 소수가 아니다
if (n<=1):
return False
#2와3은 소수이다
if (n<=3):
return True
#2나 3으로 나누어떨어지면 소수가 아니다
if (n%2==0 or n%3==0):
return False
i=5
while(i * i<=n):
if(n%i ==0 or n%(i+2) ==0):
return False
i=i+6
return True
is_eleven_prime = is_prime(11)
print(f"11 is prime? {is_eleven_prime}")
is_ten_prime = is_prime(10)
print(f"10 is prime? {is_ten_prime}")
함수로 원하는 값을 parameter로 넘겨줘서 호출하면 된다.
def love_you(my_name, your_name):
print(f"{my_name} loves{your_name}"
love_you("강호동","이수근")
결과는 "강호동 loves 이수근" 이다.
위가 가장 기본적이지만 위의 경우처럼 순서에 맞춰서 parameter값을 전해주지 않을 수 있는 방법도 있다. 순서 대신에 parameter 이름으로 맞춰서 값을 전해줄 수 있다. 이를 keyword arguments 이라고 한다.
def love_you(my_name, your_name):
print(f"{my_name} loves{your_name}"
love_you(your_name="이수근", my_name="강호동")
순서가 바뀌어도 결과는 그대로 나온다. 또한 이름에 맞춰서 값을 함수에 넘기기 때문에 실수로 값이 바뀔 확률이 적고 가독성도 높아진다.
positional arguments , keyword arguments를 혼용하여 사용하는 것도 가능하다.
그치만 positional arguments는 순서를 지켜줘야 한다 !
함수의 parameter에 default 값을 정의해줄 수도 있다. Default값이 정의된 parameter는 함수가 호출될때 값을 넘겨주지 않아도 괜찮다. 그럴 경우 default값이 자동으로 넘겨진다.
def love_you(my_name, your_name="이수근"):
print(f"{my_name}loves{your_name}")
love_you("강호동")
결과 역시 강호동 loves 이수근 으로 동일하게 나온다.
다만 조심할 것은 default값이 정의되지 않은 parameter보다 먼저 위치해있으면 안된다 !