[python]기초문법7
함수의 기본 형태
def 함수(매개변수):
변수 = 초기값
#처리 로직
#처리 로직
#처리 로직
return 변수
예제)
start ~ end까지 있는 모든 정수를 더하는 함수
def sum_all(start,end):
a = 0
for i in range(start, end+1):
a += i
return a
print(sum_all(1,100)) //5050
print(sum_all(50,100)) // 3825
매개변수로 전달된 값들을 모두 곱해서 리턴하는 가변 매개변수 함수
def mul(*values):
a = 1
for i in values:
a *= i
return a
print(mul(5, 7, 9, 10))
재귀함수와 메모화
재귀함수 : 함수내에서 자기자신을 호출하는 함수
팩토리얼 구현하기
팩토리얼:
n! = 1 * 2 * 3 …(n-1) * n
def factorial_1(n):
a = 1
for i in range(1, n + 1):
a *= i
return a
재귀함수를 이용한 구현
def factorial_2(n):
if n == 0:
return 1
else:
return n * factorial_2(n - 1)
factorial_1(10)
factorial_2(10)
피보나치수열 구현에서 재귀함수의 한계
counter = 0
def f(n):
global counter //함수내부에서 함수밖에 있는 변수를 사용할때, 함수앞에 global 키워드를 선언한다
counter += 1
if n == 1 or n == 2:
return 1
else:
return f(n - 1) + f(n - 2)
print(f(40))
print(counter) //계산이 몇번 돌아가는지 카운트하는 변수 출력
메모화(memoization)를 이용한 재귀함수 보완
memo = { 1: 1, 2: 1}
def f(n):
if n in memo:
return memo[n]
else:
output = f(n-1) + f(n-2)
memo[n] = output
print(f(150))
조기 리턴
조기에 리턴해서 이후 함수 실행을 차단하는 것.
=>들여쓰기의 단계를 줄여줄 수 있다.
함수의 실행조건에 맞지않는것은 함수 앞부분에서 다 날려버린다.
def f(n):
if n in memo:
return memo[n]
output = f(n-1) + f(n-2)
memo[n] = output
return output
재귀함수를 이용하여 리스트를 같은 레벨로 평탄화하기
def flatten(data)
output = []
for item in data:
if type(item) == list:
output += flatten(item)
else:
output += [item]
return output
example = [ [1, 2, 3], [4, [5, 6]], 7, [8, 9]]
print("원본:", example) #[ [1, 2, 3], [4, [5, 6]], 7, [8, 9]]
print("변환:", flatten(example))#[1, 2, 3, 4, 5, 6, 7, 8, 9]
Leave a comment