이미지 출처: https://wikidocs.net/192339
이번 시간에는 파이썬 모듈에 대해 알아보겠습니다.
모듈의 기본 개념은 우리는 지금까지 코딩할 때 하나의 파일 안에 함수들을 정의했습니다. 경우에 따라 클래스들도 있습니다. 연관관계가 있는 변수, 함수, 클래스 이런 것들을 모아놓은 어떤 파일을 모듈이라고 합니다. 이 파일을 타인이 쓰기도 하며 다른 사람의 모듈을 쓰기도 한다. 함수, 변수 클래스 등 파이썬 구성 요소 등을 모아놓은 파일이라고 생각하시면 됩니다. 나중에 배우겠지만 이런 모듈들이 합쳐지면 패키지가 됩니다.🙂
아래와 같이 math는 파이썬에서 제공하는 표준 라이브러리 중 하나인 모듈입니다. 저희도 모듈을 만들면 저런식으로 다른사람이 사용할 수 있겠죠.
import math math.pi >>> 3.1415926535...
간단하게 사칙연산을 함수로 만들어 보고 그걸 다른 파일에서 사용해보겠습니다.
def add(x, y): return x + y def subtract(x, y): return x - y def multply(x, y): return x * y def divide(x, y): return x / y def power(x, y): return x ** y print('-' * 15) # 함수 바로 밑에서 호출이니 내부에서 호출 print('called! inner') print(add(5,5)) print(subtract(15,5)) print(multply(5,5)) print(divide(10,2)) print(power(5,3)) print('-' * 15) >>> --------------- called! inner 10 10 25 5.0 125 ---------------
만약에 우리가 다른 파일을 만들고 그 파일에서 사칙 연산이 필요한 부분이 있다면, 그때 다시 add 함수를 만들고, subtract 함수를 만드는 것은 생산성이 떨어지고 비효율적입니다. 그때 위의 코드들을 모듈로 등록해서 다른 파일에서 갖다 쓸 수 있다면 얼마든지 재사용할 수 있습니다.💻
다른 파일을 하나 만들고 우리가 만든 파일을 import 해보겠습니다.
기존 파일 : chapter06_02.py
새로만든 파일 : module_test.py
import sys print(sys.path) >>> # sys안에 있기때문에 import로 우리가 만든 것을 가져다가 사용가능하다. ['C:\\Users\\yount\\Desktop\\Python +', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\DLLs', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages']
chapter06_02.py 파일을 다른 곳에다가 옮기고 테스트해 보겠습니다. 물론 지금까지 공부한 파일들이 있는 경로로 등록하면 전부 다 검색되겠지만 저희는 다른 곳에 옮겨서 경로를 넣고 테스트해 보겠습니다.
저는 math라는 새로운 폴더를 생성하고 그안에 헷갈리지 않게 module_test 파일명을 바꿔서 test_module 파일로 넣겠습니다. 경로는 'C:/math' 입니다. 여러분도 임의로 폴더를 생성하시면 됩니다. 이 경로를 sys에 등록하고 import하면 저희가 만들어 놓은 함수들을 가져다 사용 가능하겠죠!
아래 파일은 module_test.py에서 작성중입니다.
import sys print(type(sys.path)) # 리스트에 데이터를 추가할때는 append, insert 또는 인덱스 번호로 직접 수정 가능합니다. 저는 append 메소드로 맨마지막에 추가해보겠습니다. >>> <class 'list> # sys.path.append는 영구적으로 되는 것이아니라 코드상에서만 되는것 영구적으로 하기 위해서는 구글에서 파이썬 패스에 영구적등록해야한다. sys.path.append('C:/math') print(sys.path) >>> # 끝 부분에 math가 추가 되었습니다. ['C:\\Users\\yount\\Desktop\\Python +', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\DLLs', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages', 'C:/math']
이제 모듈을 불러와 봅시다.
실행해 보니 아까 06_02에 만들어 놓았던 print 코드가 자동으로 실행됩니다. 하지만 이 내용이 실행되면 안 됩니다. 우리가 사용하기 전에 갑자기 이 안에 있는 모든 내용을 불러오기 때문에, print문이 자동으로 실행이 된 겁니다. 이걸 방지하는 것은 조금 있다 다시 알아봅시다. 🙄
import test_module >>> --------------- called! inner 10 10 25 5.0 125 ---------------
test_module에 있는 함수를 사용해봅시다.
# 10의 세제곱은 1000 print(test_module.power(10,3)) >>> 1000
정상적으로 함수가 잘 불러오는 게 보입니다. 그러면 06_02로 다시 돌아가서 print문이 호출되지 않게 해봅시다. print문은 주석 처리하거나 없애야 출력이 되지 않겠죠? 파이썬에서는 다른 곳에서 외부적으로 이 파일을 임포트할 경우와 자기 자신을 스스로 실행할 경우를 구분하는 예약어가 있습니다. 이를 알아봅시다. 그리고 sys.path에 python_basic이란 경로가 추가되어 있을 겁니다. 같은 폴더에 있는 파일을 모두 import 할 수 있다는 의미인데요 없다면 추가해 주시길 바랍니다.('C:\python_basic')
import chapter_06_02 >>> --------------- called! inner 10 10 25 5.0 125 ---------------
06_02에서 작성중
이제 06_02파일을 불러올때 불필요하게 실행되는 print문을 name이라는 키워드로 설정해보겠습니다.
# print문은 주석처리해준다. # print('-' * 15) # print('called! inner') # print(add(5,5)) # print(subtract(15,5)) # print(multply(5,5)) # print(divide(10,2)) # print(power(5,3)) # print('-' * 15) # 내 자신을 실행할 경우 밑의 구문이 실행되는것이고, 아닌경우에는 실행x if __name__ == "__main__": print('-' * 15) print('called! __main__') print(add(5,5)) print(subtract(15,5)) print(multply(5,5)) print(divide(10,2)) print(power(5,3)) print('-' * 15)
다시 module_test로 돌아가서 실행해봅시다.
이제는 아무것도 실행되지 않습니다.
이말은 다른 파일에서 chapter_06_02를 호출할 때는 그 실행하는 파일은 name이 main이 아니라는 말입니다. 만약 chater_06_02에서 실행하면 실행이 되겠죠!
여러분이 어떤 모듈을 만들고 코드 아래에
if name == 'main' 이렇게 쓰고 아래에서 테스트를 하는것입니다. 다른 사람들이 참고할 만한 코드들을 작성해 놓으면, 사용자 입장에 이 모듈 파일은 어디에 있는지 찾아볼 것입니다. 그렇게 코드들을 보면서 테스트로 실행해 볼 코드로 main에 작성되있는 코드들을 실행해 볼 것입니다.
import chapter06_02 >>>
main은 내자신을 바로 실행할 경우에는 main 아래 코드가 실행되고 아닐 경우에는 실행되지 않습니다. 간단한 내용이지만 파이썬의 원리를 알아야 하기에 내용이 길어졌습니다. 잘 만들어진 오픈소스들을 보면 이해를 돕기 위해 메인 영역을 따로 만들어 놓습니다. 다음 시간에는 패키지를 알아보겠습니다. 😙