본문 바로가기

Python Basic/혼공파

[혼공파] Chapter 07 모듈


  • 는 개념 정리
  •  개인적으로 새롭게 알게 된 점 

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

모듈 사용의 기본

  1. math 모듈
  2. random 모듈
  3. sys 모듈
  4. os 모듈
  5. datetime 모듈
  6. time 모듈
  7. 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

decorator

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를 사용한 것과 사용하지 않은 형태 모두).

__init__.py 없을 때. from <패키지> import * (x)
__init__.py 에서 리스트 작성 안함. from <패키지> import * (x)
__init__.py 에서 리스트 작성 함. from <패키지> import * (o)

 

  • 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