[python]기초문법7

1 minute read

함수의 기본 형태

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