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 사용자 정의 함수 예제
- 이제 사용자 정의 함수를 사용하자.
- 함수 선언 시,
def
는define
의 약자다.
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.py
와subtract.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
해서 업로드하는 것을 추천한다.