함수, 모듈, 패키지의 차이점
https://losskatsu.github.io/programming/function-module-package/#3-패키지라이브러리
https://dodonam.tistory.com/107
파이썬 표준 라이브러리: 파이썬에 기본으로 설치된 패키지,모듈, (내장)함수를 묶어서 파이썬 표준 라이브러리(Python Standard Library, PSL)라 부릅니다.
모듈: 특정 기능을 .py 파일 단위로 작성한 것입니다.
패키지: 특정 기능과 관련된 여러 모듈을 묶은 것입니다. 모듈에 namespace를 제공.
다만 python. 3.3 버전이하에서 패키지 폴더를 만들때 해당 폴더가 패키지임을 명시하기 위해 __inint__.py 파일을 해당 폴더에 생성해야한다.
패키지안에 모듈을 불러와 쓰는 방법은 아래와 같다.
- import 패키지.모듈
- import 패키지.모듈1, 패키지.모듈2
- 패키지.모듈.변수
- 패키지.모듈.함수()
- 패키지.모듈.클래스()
참고 |
가져온 모듈 해제하기, 다시 가져오기
import로 가져온 모듈(변수, 함수, 클래스)은 del로 해제할 수 있습니다.
>>> import math
>>> del math
모듈을 다시 가져오려면 importlib.reload를 사용합니다.
>>> import importlib
>>> import math
>>> importlib.reload(math)
그렇다면 if __name__==’__main__’ 을 쓰는 이유에 대해 알아보면
if __name__ == '__main__': 코드~
아래와 같이 main.py 에서 hello 라는 모듈을 임포트를 해올 경우,
import hello hello.hi() '안녕하세요'
파이썬에서 import로 모듈을 가져오면 해당 스크립트 파일이 한 번 실행됩니다
따라서 hello 모듈을 가져오면 hello.py 안의 코드가 실행됩니다.
이때 __name__이라는 변수에는 hello를 임포트해오기 때문에
hello.py의 __name__ 변수에는 ‘hello’가 들어가고, main.py의 __name__ 변수에는 ‘__main__’이 들어갑니다.
파이썬의 경우, import를 해올때 import 해오는 모듈을 모두 실행하기 때문에 원치않는 코드가 실행될 수 있는 경우가 있다.
내가 시작하는 시작점(entry point) 이 어떤 파일인지를 명확히 하고 의도대로 코드를 실행시키기 위해
if __name__==’__main__’: 이라는 조건을 달아 해당 스크립트 파일을 실행시킨다.
파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없습니다.
어떤 스크립트 파일이든 시작점도 될 수 있고, 모듈도 될 수 있습니다.
그래서 __name__ 변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단합니다.
if __name__ == ‘__main__’:처럼 __name__ 변수의 값이 ‘__main__’인지 확인하는 코드는 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업입니다. 즉, 스크립트 파일이 메인 프로그램으로 사용될 때와 모듈로 사용될 때를 구분하기 위한 용도입니다.
참고 | 파이썬은 왜 프로그램의 시작점이 정해져 있지 않나요?
파이썬이 처음에 개발 될 당시에는 리눅스/유닉스에서 사용하는 스크립트 언어 기반이었기 때문에 프로그램의 시작점이 따로 정해져 있지 않았습니다. 보통 리눅스/유닉스의 스크립트 파일은 파일 한 개로 이루어진 경우가 많은데, 이 스크립트 파일 자체가 하나의 프로그램이다 보니 시작점이 따로 필요하지 않습니다.
하지만 C 언어나 자바같은 언어는 처음 만들어질 때부터 소스 파일을 여러 개 사용했기 때문에 여러 소스 파일의 함수들 중에서도 시작 함수(main)를 따로 정해 놓았습니다.
출처 : https://dojang.io/mod/page/view.php?id=2448
1. 함수
함수는 미리 정한 동작을 수행하는 코드를 묶은 것을 의미합니다.
함수를 사용하면 같은 코드를 여러 번 작성할 필요가 없다는 장점이 있습니다.
위 그림은 입력변수의 덧셈 결과를 출력하는 sum이라는 함수입니다.
def sum(a,b): c = a + b return c
함수는 위 그림과 같이 어렸을 때 수학 시간에 배운 함수의 개념과 동일하다고 생각할 수 있습니다.
>>> sum(2,5) 7
위 코드와 같이 sum 함수를 이용해 2와 5의 합을 구하면 7인 것을 알 수 있습니다.
2. 모듈
모듈: 특정 기능을 .py 파일 단위로 작성한 것입니다.
모듈(module)은 전역변수, 함수, 클래스 등을 모아놓은 .py 확장자를 가진 파일입니다.
위 그림에서 모듈 module01.py는 변수 2개, 클래스 1개, 함수 2개를 모아 놓은 .py 파일입니다.
그리고 main.py라는 다른 파이썬 파일에서 모듈 module01를 import 명령어를 이용해 불러올 수 있습니다.
모듈을 실습하기 위해 위와 같은 파일을 만든다고 해보겠습니다.
임의의 실습 폴더를 만들고 module01.py와 main.py를 만듭니다.
# module01.py A= 1 B = 2 def sum(c, d): e = c + d return e
위 코드는 module01.py의 코드입니다.
# main.py import module01 new_a = module01.A print("new_a = ", new_a) new_b = module01.B print("new_b = ", new_b) sol = module01.sum(new_a, new_b) print("new_a + new_b = ", sol)
위 코드는 main.py파일의 코드입니다.
파일을 생성했다면 Anaconda prompt를 실행합니다. 그리고 생성된 프롬프트 창에서 다음과 같이 입력합니다.
(base) > cd ‘실습폴더’ (base) > python main.py new_a = 1 new_b = 2 new_a + new_b = 3
3. 패키지/라이브러리
패키지: 특정 기능과 관련된 여러 모듈을 묶은 것입니다. 패키지는 모듈에 네임스페이스(namespace, 이름공간)를 제공합니다.
파이썬 표준 라이브러리: 파이썬에 기본으로 설치된 모듈과 패키지, 내장 함수를 묶어서 파이썬 표준 라이브러리(Python Standard Library, PSL)라 부릅니다.
앞서 모듈이 함수의 집합이라면 패키지(package)는 모듈을 모아놓은 폴더라고 할 수 있습니다.
패키지는 종종 라이브러리(library)라고도 부릅니다.
엄밀하게 말하면 라이브러리는 패키지의 집합으로 패키지 보다 포괄적인 개념이지만, 혼용해서 사용하기도 합니다.
예를 들어, 넘파이 라이브러리라고도 부르고, 넘파이 패키지라고도 부릅니다.
패키지 실습 폴더 구성은 위 그림과 같습니다. 파일의 코드는 앞선 모듈 코드와 동일합니다.
모듈 실습과의 차이점은 모듈이 package01이라는 폴더 안에 존재한다는 것입니다.
# main.py import package01.module01 new_a = package01.module01.A print("new_a = ", new_a) new_b = package01.module01.B print("new_b = ", new_b) sol = package01.module01.sum(new_a, new_b) print("new_a + new_b = ", sol)
main.py 파일의 코드 내용은 위와 같습니다.
(base) > cd ‘실습폴더’ (base) > python main.py new_a = 1 new_b = 2 new_a + new_b = 3
그리고 anaconda prompt에서 위 코드를 실행하면 결과를 확인할 수 있습니다.