티스토리 뷰

python lecture/basic

[edu] 파이썬 시작하기 - 4

burningrizen 2018. 8. 27. 17:12

[재사용]




0 부터 num 까지 합을 구하는 코드가 있습니다.


num = 10
result = 0
for i in range(num+1):
result += i
print(result)

num 에 10을 넣습니다.


총합을 담을 변수 result 를 0으로 초기화 합니다.


range(num) 까지 하면 num-1 까지 순회하므로 num 까지 돌기 위해서는 num+1 로 해줍니다.


result = result + i 와 result += i 는 동일합니다. 


연산자 우선순위에 따라 + 가 먼저 계산되고 그값을 = 연산자로 좌측에 대입되게 됩니다. 


그리고 마지막으로 0~10 까지의 총합 result 를 출력하고 55를 확인할 수 있습니다.



그렇다면 0~num 까지 더하는 코드를 한번이 아니라 여러번 사용되게 되면


매번 이 코드를 작성해줘야 할까요??


그렇지 않습니다. 한번만 작성해 놓고 필요할 때 호출해서 사용하면 됩니다.


재사용한다면 코드가 간결해지고 모듈화 되서 유지보수 비용이 줄어 들게 됩니다.


여러곳에서 호출되서 재사용되는 코드만 수정하면 되기 때문입니다.







[함수]



0 부터 num 까지 합을 구하는 코드가 있습니다.



이것을 함수로 작성해서 호출해 볼게요!

def sum(num):
result = 0
for i in range(num+1):
result += i
return result

def 로 시작한다면 함수를 정의 한다는 뜻입니다.


sum 은 함수의 이름이고 이것은 개발자가 임의로 정의할 수 있어요


num 이라는 인자 1개를 sum이라는 함수가 받는 것이고 


return result 는 result 이라는 변수의 값을 sum 함수 외부에 전달해 주는것 입니다.


 이것은 함수의 정의이고 이것만으로 함수가 동작하지 않습니다.


total = sum(10)
print(total)


sum 이라는 함수를 호출하고 함수안에 10 을 인자값으로  넘겨 준것입니다.

sum 함수의 리턴값을 변수 total 에 받습니다.
 

sum(10)

이렇게 return 값을 받지 다른 변수에 받지 않아도 함수는 동작은 합니다.


이렇게 함수를 정의 이후에 호출 해줘야 함수가 동작하게 됩니다.


함수의 종료시점은 최초 return 을 만났을때 혹은 함수 안에 모든 코드를 실행했을 때 입니다. 







[재귀함수]



A 라는 함수의 정의 내부에서 자기자신 A 를 호출하는 경우를 재귀함수 라고 합니다.


이것을 함수로 작성해서 호출해 볼게요!


def foo(num):
if num > 0:
print("enter=",num)
foo(num-1)
print("exit=",num)

num > 0 의 조건이 참일 때는 아래 3줄의 코드를 실행하고 

거짓일 때는 함수를 종료 합니다.


때문에 num > 0 일때만 자기 자신 함수로 재귀 하고 아닐때는 

더이상 재귀하지 않고 종료합니다.


만약 num 이 계속 감소해서 0 이 되지 않는다면 


무한히 자기 자신을 호출해서 프로그램이 죽게 될거에요.


('enter=', 3)
('enter=', 2)
('enter=', 1)
('exit=', 1)
('exit=', 2)
('exit=', 3)

위 foo 라는 함수를 호출하면 결과가 이렇게 출력됩니다.


모든 enter 가 3,2,1 순서대로 실행되고 exit 는 1,2,3 순서대로 실행됩니다.


모든 재귀는 enter 아래 있고 모든 exit 는 재귀 아래에 있기 때문입니다.


exit 전에 foo 자기자신으로 들어가서 모든 재귀가 끝난다음에 


더이상 재귀되지 않을 때 비로소 exit 가 찍히게 됩니다.







[과제]



- 사칙연산을 하는 함수 4개를 작성


- 원의 넓이를 구하는 함수, 사각형의 넓이 구하는 함수 작성


- 리스트와 값을 입력 받아서 입력 받은 리스트에 입력 받는 값을 갖는 요소가 있는지 확인하는 함수 작성


- 재귀함수로 n~0 까지 카운트다운(출력)하는 함수 작성


댓글