How to create my own function

Page content

강의 홍보

I. 개요

  • 나만의 함수를 작성해 본다.
  • 실행가능한 함수를 만들어 본다.

II. 기존 내장 함수

  • 함수는 특정 기능을 수행하는 코드를 의미한다.
  • 함수는 Sum(), Len()을 의미한다.
x = [1,2,3,4,5]
print(sum(x))
print(len(x))
5

III 사용자 정의 함수 예제

  • 이제 사용자 정의 함수를 사용하자.
  • 함수 선언 시, defdefine의 약자다.
def my_avg(x):
  sum_var = sum(x)
  len_var = len(x)
  return sum_var / len_var

print(my_avg(x))
3.0
  • 기본적인 사용정의 함수는 크게 매개 변수return으로 이루어진다.
    • 이 때의 매개변수는, string, int, DataFrame 등 다양하게 올 수 있다.
    • return의 의미는 일종의 함수를 실행한 뒤 반환하려는 output이다.

IV. 파이썬에서 실행모드 구축하기

  • 사용자 정의 함수를 작성하였다면, 이제부터는 Main() 함수를 활용하여 코드를 빠르게 실행할 수 있도록 한다. 아래와 같이 코드를 작성하자.
  • PyCharm, VSCode에서 main.py 안에 아래와 같이 코드를 작성해본다.
# -*- coding: utf-8 -*-

def main():
  print("안녕하세요, Main() 입니다. ")

if __name__ == "__main__":
  main()
안녕하세요, Main() 입니다. 
  • 위 구문은 일종의 파이썬 파일을 실행시키기 위한 일종의 규약이라 이해하면 좋을 것 같다.
  • __name__은 모듈의 이름이 저장되는 곳이다.
  • __main__은 모듈의 시작점과 같다. main.py에서 __name__=="__main__"은 바꾸지 않는다.
  • 이 때, 위 파일을 작성하면, shell에서 다음과 같이 실행한다.
~ $ python main.py
안녕하세요, Main() 입니다. 

(1) 파일 구조

  • 크게 두개의 파일을 작성할 것이다.
    • calculation.py
    • main.py
  • calculation.py에서 기본적인 코드를 작성한 뒤, main.py에서 해당 모듈을 가져와서 함수를 사용할 것이다.

(2) calculation.py 파일 작성 및 실행

  • 간단하게 사직연산 함수를 작성한다.
# -*- coding: utf-8 -*-
a = 3
b = 4

def plus(a, b): 
  c= a+b
  return c

def subtract(a, b):
  c = a-b
  return c

if __name__ == "__main__":
  print("a + b =", subtract(a, b))
  print("a - b =", plus(a, b))
  • 위와 같이 파일을 작성한 뒤 저장한다.
  • 그리고, shell에서 다음과 같이 실행한다.
~ $ python calculation.py
a + b = -1
a - b = 7

(3) main.py 작성 및 실행

  • 기존 calculation.py에서 if~이하의 구문을 제거한 후, 다시 저장한다.
  • 이번에는 main.py에서 아래와 같이 파일을 작성한다.
# -*- coding: utf-8 -*-
import calculation as cal

a = 3
b = 4

def main():
  print("안녕하세요, Main() 입니다. ")
  print("a + b =", cal.subtract(a, b))
  print("a - b =", cal.plus(a, b))

if __name__ == "__main__":
  main()
  • 그리고 이번에는 shell에서 main.py를 실행한다.
~ $ python main.py
안녕하세요, Main() 입니다. 
a + b = -1
a - b = 7

(4) 소결론

  • 같은 파일 경로에 있다면, 다른 file에서 함수(=module)을 불러올 때는 패키지에서 파일을 불러오는 것처럼, import ~형태로 사용할 수 있다.
  • 그리고, 각 파일명 안에는 다양한 작성할 수 있고, 또한 불러올 수 있다.

V. 두개의 폴더를 활용한 실행모드 구축

  • 이제 한 폴더 안에서 다른 파일의 함수를 불러올 수 있음을 확인하였다.
  • 이제는 두개의 폴더를 만들어 각각의 기능을 구현해본다.
  • 폴더는 크게 두가지다.
    • 사칙연산을 의미하는 arithmetic
    • 데이터 전처리를 의미하는 dataPreprocessing
  • 각각의 폴더안에 각 2가지의 파일을 작성할 예정이다.
  • 마지막으로 main.py는 독립적으로 위치해 놓는다.

(1) Arithmetic 폴더

  • plus.pysubtract.py안에 함수를 각각 저장한 뒤 작성한다.
    • plus.py
# -*- coding: utf-8 -*-
def add(a, b): 
  c= a+b
  return c
  • subtract.py
# -*- coding: utf-8 -*-
def minus(a, b):
  c = a-b
  return c

(2) dataPreprocessing 폴더

  • 파일 불러오기를 실행하는 importData.py와 데이터 전처리를 담당하는 processing.py에 해당하는 소스코드 작성 후 각각 저장한다.
    • importData.py
# -*- coding: utf-8 -*-

def readData():
    print("~~ 데이터를 불러옵니다 ~~ ")
    data = "빅쿼리에서 불러오는 데이터"
    return data
  • processing.py
# -*- coding: utf-8 -*-
from time import sleep

def process_data(data):
    print("~~ 데이터 전처리 함수를 실행합니다! ~~")
    modified_data = data + "가 수정 완료 되었습니다."
    sleep(3)
    print("~~ 데이터 전처리가 끝났습니다! ~~")
    return modified_data

(3) main.py 수정

  • 다음은 main.py를 아래와 같이 수정하도록 한다.
# -*- coding: utf-8 -*-
from arithmetic import plus as pl
from arithmetic import subtract as sub
from dataPreprocessing import processing
from dataPreprocessing import importData

a = 3
b = 4

def main():
  print("~~ 사칙 연산을 시작합니다 ~~ ")
  print("a + b =", sub.minus(a, b))
  print("a - b =", pl.add(a, b))
  print("~~ 사칙 연산을 종료합니다 ~~ ")

  ## 데이터 전처리 시작
  data = importData.readData()
  processing.process_data(data)

if __name__ == "__main__":
  main()
  • 그 다음 shell에서 다음과 같이 실행하면 아래와 같은 결과물을 얻게 될 것이다.
~ $ python main.py
~~ 사칙 연산을 시작합니다 ~~ 
a + b = -1
a - b = 7
~~ 사칙 연산을 종료합니다 ~~ 
~~ 데이터를 불러옵니다 ~~ 
~~ 데이터 전처리 함수를 실행합니다! ~~
~~ 데이터 전처리가 끝났습니다! ~~

(4) 파일구조 리뷰

  • 파일 구조는 아래와 같다.
.
├── arithmetic # 폴더
│   ├── plus.py
│   └── subtract.py
├── dataPreprocessing # 폴더
│   ├── importData.py
│   └── processing.py
├── main.py

VI. 결론

  • from의 각각의 폴더명을 의미한다.
  • import는 동일 폴더내의 다양한 py 파일명을 의미한다.
  • 각각의 파일명안에 있는 다양한 함수들을 불러와서 사용할 수 있다.
  • 프로젝트 파일을 제출할 시에는 위와 같이 main.py를 실행만 하더라도 결과가 나올 수 있도록 프로젝트 파일을 Refactoring해서 업로드하는 것을 추천한다.