일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sql
- Display
- git #github #내일배움캠프
- python
- 내일배움캠프
- iterable
- Iterator
- 함수성능평가
- position
- A태그
- gitignore
- AI
- itertools
- 함수실행시간
- googleappscript
- WIL
- time()
- 우선순위
- venv
- cte
- with\
- 알고리즘
- 가상환경
- target
- AI 5기
- onClick
- Level1
- vscode
- 프로그래머스
- googlesheet
- Today
- Total
05의 개발 계발
[TIL] 230327 [Python] import 사용법 - 파일불러오기 본문
TIL 학습목표
- Python 에서 import 의 의미를 안다.
- Python 에서 import를 사용하는 방법을 안다.
- import의 코드컨벤션(≒암묵적 약속,권장사항)을 안다.
1) 문제점 (Problem)
일반적으로 유지보수와 가독성을 위해 파일을 나누어서 작업한 뒤 import로 끌어와 main.py 에서 실행한다.
그런데 팀원들과 개인 과제 리뷰 중
import <파일명> 을 사용하는 팀원과 from <파일명> import* 을 사용하는 팀원으로 나뉘어 코드 리뷰 시 혼동이 왔었다.
이에 import의 사용법과 코드컨벤션에 대해 학습을 진행하였다.
2) 학습내용
▶import의 의미 | 참고자료
import : '수입하다', '가져오다'라는 뜻으로, 다른 프로그램으로부터 데이터를 갖고 오는 것을 뜻한다.
즉, 모듈을 가져와 사용할 때 import 라는 명령어를 사용해 참조한다.
a.py 에서 b.py를 import 한다는 것은
a.py상단에 b.py가 써져있는 것 같은 효과를 준다.
즉, b.py에 적혀있는 클래스,함수,변수 들을
a.py에서 정의하지 않더라도 사용할 수 있다는 것이다.
▶import 방법의 종류
여기서, 내가 만든 파일도 하나의 모듈(module)임을 알도록 하자.
또한 <변수> 는 <모듈>에서 정의된 변수,클래스,함수 등을 모두 포함하는 의미임을 알자.
명령어 | 의미 | 특징 |
import <모듈명> | 모듈을 참조하겠다 | 모듈명을 언급해야(O) 변수 호출이 가능하다 |
from <모듈명> import * | 모듈에 있는 모든 변수들을 참조하겠다 | 모듈명 언급없이(X) 바로 변수 호출이 가능하다 |
from <모듈명> import <변수명> | 모듈에 있는 특정 변수만 참조하겠다 | 모듈명 언급없이(X) 바로 특정 클래스와 메소드 호출이 가능하다 |
from . import <파일명> | 현재폴더에 있는 특정 파일을 참조하겠다 | - |
#예시
import msvcrt
from rich import * #전체참조하는 import*를 wildcard import 라고 한다.
from threading import Timer
from . import views
▶import 코드컨벤션(권장사항)
구글링한 결과와 후에 pylint(VScode확장)의 사용법을 터득하고 알게 된 것들이다.
여기서, 내가 만든 파일도 하나의 모듈(module)임을 알도록 하자.
- import os, time, system 처럼 한 줄에 여러개의 모듈이나 파일명을 쓰지 않는다.
- 가독성을 위해 한줄에 하나씩 작성한다.
- from <모듈명> import * 은 권장하지 않는다.
- import 하여 사용한 것이 무엇인지 알아야 오류대처에 유리하다.
- import * 로 파일 전체를 끌어오면 변수와 함수, 클래스 등 모든걸 참조하므로 변수 충돌의 위험이 높아진다.
- 코드실행에 문제가 없다하더라도 사용하지 않는 모듈과 파일은 import 에서 지운다.
- 가독성과 코드리뷰에 용이하게 사용한 것들만 명시되도록 한다.
- [ standard import 내장 모듈 ] > [ pip install 한 모듈 ] > [ 직접 만든 모듈 ] 순으로 위에서부터 작성한다.
- 충돌이 발생할 확률이 낮은 순으로 최상단에 배치된다.
- 모듈이 섞이지 않도록 해 코드리뷰시 용이하다.
- import는 항상 모듈 최상단에 기입한다.
- 모듈을 한눈에 파악할 수 있다.
- 사용된 모듈을 통해 코드의 구동을 짐작할 수 있다.
3) 시사점
wildcard import를 할 경우 변수 충돌이 발생할 수 있다.
from <모듈명> import * == wildcard import
모듈의 모든 변수를 참조하면 순간은 참조의 편의성을 느낄 수 있지만,
각 모듈의 변수명이 겹칠경우 충돌이 발생하여 의도치 않은 오류나 버그가 발생할 수 있다.
따라서, 의식하고 참조할 수 있는 import <모듈명> 방식이나
필요한 변수만 참조 가능한 from <모듈명> import <변수명> 을 사용하도록 하자
4) 알게 된 점 (Learnd)
import의 사용방법과 import 시 고려해야 할 부분에 대해 알게되었다.
특히나 코드컨벤션을 알아보는 부분에서 import 시 충돌이 일어날 수 있겠다는 생각을 하게 되었다.
지금처럼 미니프로젝트 수준의 프로젝트는 사용할 변수도 모듈도 적기 때문에 충돌의 위험이 적지만,
큰 프로젝트의 경우 자칫하면 대참사가 발생할 수 있는 큰 부분인것 같다.
코드컨벤션이 왜 중요한지 점점 알게되어간다. 익숙해지도록 하자.
개인과제 T개인과제 Text_RPGext_RPG개인과제 Text_RPG
'TIL' 카테고리의 다른 글
[TIL] 230329 [Python] threading 모듈, Timer 사용 (0) | 2023.03.30 |
---|---|
[TIL] 230328 [Python] Class의 사용목적 과 list 응용 (0) | 2023.03.28 |
[TIL] 230324 [python] iterable & iterator & itertools 의 관계 (0) | 2023.03.24 |
[TIL] 230323 [python] .sort 와 sorted()의 차이 (Method 와 Function) (0) | 2023.03.23 |
[TIL] 230322 [python] 함수 실행 시간 측정 (0) | 2023.03.22 |