[Python] 함수

김두나·2024년 10월 10일

Python

목록 보기
9/10

함수 활용법

파이썬에서 함수를 선언하기 위해서는 def키워드를 사용해야함
함수란 자주 사용하는 동작을 하나로 묶는 것

위 코드는 어떤 리스트에 들어있는 모든 값을 곱하는 코드임

이 리스트가 한개만 있다면 일일이 사용해도 상관 없겠지만 리스트 갯수가 많아진다면?

중복되는 코드가 많아지고 길어지고 지저분해지겠지..?

그때, 모든 값을 곱하는 코드를 묶어 함수로 선언해 놓는다면 여러번 재사용 가능해짐

함수를 선언해 놓고 함수의 이름을 불러주면 호출가능

협업을 위해서는

이 함수가 어떤 동작을 하는지 알려주기 위해 type notationpydoc을 활용하면 좋음
type notation은 어떤 타입의 데이터를 인수로 받아 어떤 타입의 데이터를 리턴하는지 적어주는 것이고, pydoc은 함수에 대한 설명을 적어두는 것

재귀함수

재귀함수란 자기자신을 다시 호출하는 함수 , 특정 조건에서 계속 자기자신을 반복함

유클리드 호제법: 두 양의 정수를 입력받아, 최대공약수를 구하는 알고리즘, a를 b로 나눈 나머지 r1이 0이라면 b가 최대공약수이고, 아니라면 b를 r1으로 나눈 나머지 r2가 0인지 확인하고, 0이라면 r1이 최대 공약수, 0이 아니라면 다시 r1을 r2로 나누어 나머지가 0이 될 때 까지 반복하는 알고리즘

유클리드 호제법은 재귀함수를 이용하면 더 짧게 짤 수 있음

재귀함수에서 많이 사용하는 또 다른 예시는 피보나치수열

위는 피보나치 수열의 수식이고 이 수식을 함수로 구성하면 다음과 같음

피보나치 수열을 계산하는 것은 계속해서 이 전에 존재했던 연산을 반복하도록 하기 때문에 연산량이 상당한 함수임.
이를 고치기 위해서는 한번 계산한 것을 메모해서 다시 계산하지 말고 메모지에서 꺼내 써보겠음

위의 함수 fid2memo라는 dict형 변수에 계산했던 내용을 메모하고, 이미 적혀있는 내용이 있다면 이를 활용해 연산을 하도록 함
따라서 같은 연산을 반복하지 않고 한번만 반복하기 때문에 연산량이 매우 줄어듬
이처럼 연산을 매번 반복하지 않고 한번 연산한 것을 저장하는 것을 캐싱기법중 메모제이션이라고 부름

실제로 fid함수와 fid2함수를 비교하기 위해 피보나치 수열 38번째 수를 출력해보겠음

위 코드를 실행해 두 함수의 실행 시간을 비교해 보면 fib2는 결과를 도출하는데 거의 즉시 나온 반면, fib함수는 결과를 도출하는데 1초 이상의 시간이 소요됨.
메모제이션이 함수의 실행시간을 단축시켜주는데 유용하다는 것을 볼 수 있음

is not None

파이썬에서 값이 None이 아닌지 확인하는 조건

None이란?

  • None은 파이썬에서 '값이 없다'를 나타내는 특수 객체
  • 함수에서 반환값이 없거나, 변수에 값이 할당되지 않았음을 나타내기 위해 사용됨

is not None 사용 예시

memo.get(n) is not Nonememo 딕셔너리에서 키 n에 해당하는 값이 존재하는지, 즉 None이 아닌지 확인하는 조건
만약 값이 있다면 이미 계산된 피보나치 수가 있으면 그 값을 반환(다시 계산하지 않음)

0개의 댓글