Python으로 Fuction 함수 만들기

제1편

by 박정수

안녕하세요, 코딩 애호가 여러분! 오늘은 프로그래밍의 핵심 개념 중 하나인 함수(Function)에 대해 알아보겠습니다. 함수는 코드를 더 효율적이고 재미있게 만드는 마법 같은 도구예요. 초보자분들이 가장 먼저 배우는 Python 언어를 예로 들어, 함수가 왜 필요한지, 어떻게 만드는지, 그리고 기본 형식을 설명할게요. 이 가이드는 초소한 2편 이상으로 나누어 연재할 예정이니, 1편에서는 함수의 기본 개념과 'def' 키워드에 집중해 보겠습니다. 편 2 이후에서는 더 실용적인 예제를 많이 다룰게요. 자, 시작해 볼까요?


1. 함수란 무엇일까요?

함수는 특정 작업을 수행하는 코드의 묶음이라고 생각하면 됩니다. 예를 들어, "커피를 만드는 과정"을 함수라고 할 수 있어요. 재료를 준비하고, 물을 끓이고, 커피를 넣고, 섞는 일련의 단계를 하나의 함수로 정의하면, 나중에 "커피 만들어!"라고 부를 때마다 그 과정을 쉽게 반복할 수 있죠. 프로그래밍에서도 마찬가지입니다. 함수를 사용하지 않으면, 같은 코드를 여러 번 복사해서 붙여 넣어야 하는 번거로움이 생겨요. 하지만 함수를 만들면, 그 코드를 한 번만 작성하고 필요할 때마다 호출할 수 있어요.


왜 함수가 필요한가요?

코드 재사용: 같은 작업을 반복할 때, 함수를 호출하면 됩니다. 코드가 짧아지고, 실수도 줄어요.

가독성 향상: 코드를 작은 단위로 나누면, 전체 프로그램이 더 이해하기 쉬워져요.

디버깅 편의: 문제가 생겼을 때, 함수 단위로 확인할 수 있어요.

모듈화: 큰 프로그램을 작은 함수들로 나누어 관리하기 좋아요.

아직도 감은 안 오죠? 조금만 더 참아보세요


함수 만들기

EXCEL에서는 2+3=5를 구하는 공식이 "=sum(2,3)"입니다. 따라서 엑셀에서는 이미 만들어진 sum(number1, number2)이라는 공식을 사용하게 되는데, Python은 수동으로 함수를 만들어야 해요. 물론 excel에서 다루기 힘든 더 고급이론의 경우에는 교수님이나 연구원들이 공식을 공개하기도 합니다.


a=2

b=3


def add_numbers(a, b):

result = a + b

return result


#이름은 아무 이름이나 가능 가령 def my_sum(a, b):

#사용법 1

print(add_numbers(a, b)) # 출력 = 5

함수를 호출할 때는 ":"을 제외하고 add_numbers(a, b)를 사용합니다.


# 사용법 2

sum1 = add_numbers(5, 3) # 5 + 3 = 8

sum2 = add_numbers(10, 20) # 10 + 20 = 30

print(f"첫 번째 합: {sum1}") # 출력: 첫 번째 합: 8

print(f"두 번째 합: {sum2}") # 출력: 두 번째 합: 30


결과는

5

첫 번째 합: 8

두 번째 합: 30


함수가 많이 사용되는 이유는 학술이론 등 코딩을 하는 과정이 난해하고 복잡한 수학식들이 많은 경우에 함수가 없다면 긴 내용의 식들을 매번 만들어야 하는 불편이 있는데, 한 번만 공식으로 만들어 주면 INPUT 값(가령, a, b)만 입력을 하면 되니까 공식으로 만들어 놓으면 편리해요.


또한 연구자들은 자신의 연구목적으로 만든 공식들을 Github이라는 tool에 저장을 해서 다른 연구자들이 무료로 활용할 수 있게 공개를 하는 경우도 있어요.


우리가 chaos인지 아닌지를 판별하는 Lyapunov function 도 공개를 해 놓은 github이 있어서 소개합니다. 여러분들 수준의 내용이 아니니까 겁먹지 마시고, 나도 열심히 하면 언젠가는 저렇게 될 수 있겠다는 자신감만 쌓으세요.


GitHub - ThomasSavary08/Lyapynov: Python package to compute Lyapunov exponents, covariant Lyapunov vectors (CLV) and adjoints of a dynamical systems.


image.png

이렇게 공식으로 만들어 두고 사용합니다.

def mLCE(system : DynamicalSystem, n_forward : int, n_compute : int, keep : bool):

'''

Compute the maximal 1-LCE.

Parameters:

system (DynamicalSystem): Dynamical system for which we want to compute the mLCE.

n_forward (int): Number of steps before starting the mLCE computation.

n_compute (int): Number of steps to compute the mLCE, can be adjusted using keep_evolution.

keep (bool): If True return a numpy array of dimension (n_compute,) containing the evolution of mLCE.

Returns:

mLCE (float): Maximum 1-LCE.

history (numpy.ndarray): Evolution of mLCE during the computation.

'''

# Forward the system before the computation of mLCE

system.forward(n_forward, False)

# Compute the mLCE

mLCE = 0.

w = np.random.rand(system.dim)

w = w / np.linalg.norm(w)

if keep:

history = np.zeros(n_compute)

for i in range(1, n_compute + 1):

w = system.next_LTM(w)

system.forward(1, False)

mLCE += np.log(np.linalg.norm(w))

history [i-1] = mLCE / (i * system.dt)

w = w / np.linalg.norm(w)

mLCE = mLCE / (n_compute * system.dt)

return mLCE, history

else:

for _ in range(n_compute):

w = system.next_LTM(w)

system.forward(1, False)

mLCE += np.log(np.linalg.norm(w))

w = w / np.linalg.norm(w)

mLCE = mLCE / (n_compute * system.dt)

return mLCE


여러분들도 새해에는 자신만의 많은 공식을 만들어 보시길 바라요

함수를 만드는 법은 매우 중요한 과정이라 다음 편에서 실습을 더 해보기로 해요.


함수3.jpg



이전 19화파이썬으로 작곡가 되어보기 2탄