- 는 개념 정리
- 는 개인적으로 새롭게 알게 된 점
7-1. 표준 모듈
- 파이썬은 모듈 (module) 기능을 활용해 코드를 분리하고 공유함.
- 모듈은 여러 변수와 함수를 가지고 있는 집합체
- 표준 모듈과 외부 모듈로 나뉨
- 표준 모듈: 파이썬에 기본적으로 내장되어 있는 모듈
- 외부 모듈: 다른 사람들이 만들어서 공개한 모듈
import 모듈 이름
from 모듈 이름 import 가져오고 싶은 변수 또는 함수
- e.g. from math import *, math 모듈 내부의 모든 것을 가져오는 것 의미. 모든 것을 가져오면, 식별자 이름에서 충돌이 발생할 수 있기 때문에 from 구문을 사용할 때는 최대한 필요한 것들만 가져와서 사용하는 것이 좋음.
import 모듈 as 사용하고 싶은 식별자
docs.python.org/ko/3/library/index.html
파이썬 표준 라이브러리 — Python 3.9.1 문서
파이썬 표준 라이브러리 파이썬 언어 레퍼런스 는 파이썬 언어의 정확한 문법과 의미를 설명하고 있지만, 이 라이브러리 레퍼런스 설명서는 파이썬과 함께 배포되는 표준 라이브러리를 설명합
docs.python.org
모듈 사용의 기본
- math 모듈
- random 모듈
- sys 모듈
- os 모듈
- datetime 모듈
- time 모듈
- urllib 모듈
1. math 모듈
- 수학과 관련된 기능
- math 모듈의 함수
변수 또는 함수 | 설명 |
sin(x) | 사인값 구함 |
cos(x) | 코사인값 구함 |
tan(x) | 탄젠트값 구함 |
log(x[,base]) | 로그값 구함 |
ceil(x) | 올림 |
floor(x) | 내림 |
- 반올림 함수 round()
- 정수 부분이 짝수일 때 소수점이 5라면 내리고, 홀수 있 때 소수점이 5라면 올림.
- 이는 컴퓨터가 내부저긍로 소수를 제대로 표현할 수 없기 때문에 이를 최대한 보완하기 위한 방법. 따라서 round() 함수를 사용하기보다, floor(), ceil() 함수를 적절하게 사용할 것.
2. random 모듈
- 랜덤한 값을 생성할 때 사용하는 모듈
- random 모듈의 함수
변수 또는 함수 | 설명 |
random() | 0.0 <= x < 1.0 사이의 float 리턴 |
uniform(min, max) | 지정한 범위 사이의 float 리턴 |
randrange(min, max) | 지정한 범위의 int 리턴 |
choice(list) | list 내부에 있는 요소를 랜덤하게 선택 |
shuffle(list) | 리스트의 요소들을 랜덤하게 섞음 |
sample(list, k=<숫자>) | 리스트의 요소 중에 k개를 뽑음. |
3. sys 모듈
- 시스템과 관련된 정보를 가지고 있는 모듈.
- 명령 매개변수를 받을 때, 많이 사용됨.
4. os 모듈
- 운영체제와 관련된 기능을 가진 모듈
5. datetime 모듈
- 날짜 형식을 만들 때 자주 사용되는 코드
6. time 모듈
- 시간과 관련된 기능을 다룰 때 사용.
- time 모듈로도 날짜와 관련된 처리를 할 수 있지만, 그런 처리는 datetime 모듈을 사용하는 경우가 더 많음.
- time.sleep()
- 특정 시간 동안 코드 진행을 정지할 때 사용하는 함수. 매개변수에는 정지하고 싶은 시간을 초 단위로 입력.
7. urllib 모듈
- URL을 다루는 라이브러리
- 즉, 네트워크의 자원 (Resource)이 어디에 위치 (Locate) 하는지 확인할 때 사용하는 것.
7-2. 외부 모듈
다른 사람들이 만들어 배포하는 External Module (외부 모듈)
- Beautiful Soup 모듈
- Flask 모듈
* 라이브러리(library)와 프레임워크(frmaework) *
- 모듈을 살펴보면 자주 사용되는 단더. 최근에는 큰 구분없이 사용되나,
- 확실하게 구분하자면 제어 역전 (IoC; Inversion of Control) 여부에 따라서 달라짐.
구분 | 설명 |
라이브러리 (library) | 정상적인 제어를 하는 모듈 |
프레임워크 (framework) | 제어 역전이 발생하는 모듈 |
* 제어 역전이란? *
- 제어가 역전되었다는 뜻.
- 정상적인 제어 (라이브러리)
- '개발자'가 직접 '모듈 내부의 기능'을 호출
- 개발자가 모듈의 기능을 호출하는 형태의 모듈을 라이브러리라고 함.
- 제어 역전 (프레임워크)
- '모듈'이 '개발자가 작성한 코드'를 실행
- e.g. 다음 예시와 같이, 내부에 함수만 정의했지 직접적으로 무언가 진행하는 코드는 단 하나도 없음에도 불구하고, Flask 모듈 내부에서 코드를 실행하고 있음.
- 즉, 우리가 작성한 코드를 직접 실행하지 않아도, Flask가 내부적으로 서버를 실행한 뒤, 지정한 파일을 읽어 들여 적절한 상황에 스스로 실행하는 형태의 모듈 (즉, 모듈이 개발자가 작성한 코드를 실행하는 모듈) 을 프레임워크라고 함.
- '모듈'이 '개발자가 작성한 코드'를 실행
데코레이터
* 함수를 수정하지 않아도, 유연하게 함수에 특정 동작을 추가하거나 작동 방식을 바꿈. *
* 함수를 감싸는 형태. *
- 코딩을 하다보면, 메인 구문이 있고, 여기에 부가적인 구문을 추가하고 싶을 때가 있음. 그리고 이 부가적인 구문을 반복해서 사용하고 싶은 경우도 있음. 이 때 부가적인 (그리고 반복적인) 작업을 decorator로 선언해서 자유롭게 사용이 가능함.
- 데코레이터는 만드는 방법에 따라 크게 '함수 데코레이터'와 '클래스 데코레이터'로 나눌 수 있음.
- 여기서는 함수 데코레이터에 대해서 알아봄.
- e.g. 다음의 함수에 추가적으로, 해당 문장을 출력하기 전과 후의 날짜와 시간을 출력하고 싶다면?
def main_function_1():
print "MAIN FUNCTION 1 START"
def main_function_2():
print "MAIN FUNCTION 2 START"
def main_function_3():
print "MAIN FUNCTION 3 START"
CODE 1
import datetime
def main_function_1():
print datetime.datetime.now()
print "MAIN FUNCTION 1 START"
print datetime.datetime.now()
def main_function_2():
print datetime.datetime.now()
print "MAIN FUNCTION 2 START"
print datetime.datetime.now()
def main_function_3():
print datetime.datetime.now()
print "MAIN FUNCTION 3 START"
print datetime.datetime.now()
CODE2 (decorator)
import datetime
def datetime_decorator(func):
def decorated():
print datetime.datetime.now()
func()
print datetime.datetime.now()
return decorated
@datetime_decorator
def main_function_1():
print "MAIN FUNCTION 1 START"
@datetime_decorator
def main_function_2():
print "MAIN FUNCTION 2 START"
@datetime_decorator
def main_function_3():
print "MAIN FUNCTION 3 START"
- decorator 역할을 하는 함수를 정의하고, 이 함수에서 decorator가 적용될 함수를 인자로 받음. python은 함수의 인자로 다른 함수를 받을 수 있다는 특징을 이용한 것.
- decorator 역할을 하는 함수 내부에 또 한번 함수를 선언(nested function)하여, 여기서 추가적인 작업 (시간 출력)을 선언하는 것.
- nested 함수를 return
7-3. 모듈 만들기
[개념 정리]
- 패키지 (package): 모듈이 모인 것.
- 엔프리 포인트(entry point), 메인(main): 프로그램의 진입점
- '__name__ == '__main__'은 현재 파일이 엔트리 포인트인지 확인할 때 사용하는 코드.
- 이를 활용하면, 현재 파일이 모듈로 실행되는지, 엔트리 포인트로 실행되는지 확인할 수 있음.
- __name__은 엔드리 포인트 파일에서는 __main__을 출력하지만, 모듈 파일에서는 모듈 이름을 출력함.
- __init__.py 파일
- 패키지를 읽을 때, 어떤 처리를 수행해야 하거나, 패키지 내부의 모듈들을 한꺼번에 가져오고 싶을 때 사용.
- 패키지 폴더 내부에 __init__.py 파일을 만들어 사용.
- 패키지를 읽어 들일 때 __init__.py를 가장 먼저 실행함. 따라서 패키지와 관련된 초기화 처리 등을 할 수 있음. __init__.py에서는 __all__ 이라는 이름의 리스트를 만드는데, 이 리스크에 지정한 모듈들이 from <패키지 이름> import * 를 할 때 전부 읽어들여짐.
- 파이썬 3.3 이전 버전에서는 __init__.py 파일이 있어야 패키지로 작동했지만, 이후 버전에서는 __init__.py 파일이 없어도 폴더 내부에 파이썬 파일이 들어 있기만 하면 패키지로 작동.
[21.01.25 추가]
- 직접 작성한 모듈을 import 하기 (__init__.py를 사용한 것과 사용하지 않은 형태 모두).
- import를 하면, 내부적으로 어떤 준비 과정을 거쳐서, 동작하는지 알아보기.
'Python Basic > 혼공파' 카테고리의 다른 글
나머지 공부 (0) | 2021.01.26 |
---|---|
[혼공파] Chapter 08 클래스 (0) | 2021.01.21 |
[혼공파] Chapter 06 예외 처리 (0) | 2021.01.13 |
[혼공파] Chapter 05 ③함수 고급 (0) | 2021.01.12 |
[혼공파] Chapter 05 ②함수의 활용 (0) | 2021.01.12 |