ID:
PW:

     0 분
     16 분

엔지니어 돌종
  dolljong
프로그래밍 Tips
프로그래밍에 관한 Tip을 공유하는 곳입니다.


[python](엔지니어를 위한) 파이썬 시작하기[8]모듈
이석종  2022-09-04 21:41:02, 조회 : 659, 추천 : 67
- Download #1 : engpython8.png (13.2 KB), Download : 17


(엔지니어를 위한) 파이썬 시작하기[8]

 

내용 : 모듈, 패키지

참조 :  https://wikidocs.net/29 (모듈), https://wikidocs.net/1418 (패키지)

 

 

 

0.시작하며

파이썬은 사람들이 만들어서 공유한 모듈과 패키지들이 강력한 힘을 발휘한다. 파이썬을 ‘glue language’라고 부르는 이유는 풀처럼 서로 다른 언어를 붙여줄 수 있기 때문이라고 한다. C로 만들어진 라이브러리를 python에 붙여서 쓸 수 있다는 것이다.

 

1. 모듈(Module)과 패키지(Package)

둘의 차이는 간단하다. module은 .py파일이다. package는 .py들을 모아놓은 디렉토리라고 생각하면 된다.

모듈 : .py파일. 예: rc_work.py 철근콘크리트에 관계된 함수들이 정의한 파일.

   → 모듈명 : rc_work

패키지 : directory이름이다. 예: bridge_work이라는 디렉토리에 rc_work.py, steel_work.py이 있을 때    → 패키지명: bridge_work

 

파일단위의 모듈부터 알아보자.

 

2. 모듈(module)

일단 파이썬이 제공하거나 남이 만들어 놓은 모듈을 내가 불러다 쓰는 법부터 배워보자. 인터프리터 상태에서 사인값을 구해보자. sin(3.14)를 구해보자. sin이 정의되어 있지 않다고 에러가 발생한다.

>>> sin(3.14)
Traceback (most recent call last):                         [wheel
-0.37.0-py3.9.egg-info
  File
"", line 1, in
NameError: name
'sin' is not defined                       whichcraft.py

 

sin도 지원안되는 언어가 있나? 그렇다 (기본적으로) 지원 안된다. sin을 쓰기 위해서는 math라는 모듈을 불러와야 한다.

 

math라는 모듈을 불러오는 방법은 아래와 같다. 인터프리터 상태에서 테스트해보자.

>>> import math
>>>

 

아무 일도 안 벌어졌지만 math 모듈이 import된 것이다. 이제 math모듈에 포함된 함수들을 쓸 수 있다. 그럼 sin함수를 써보자.

>>> import math
>>> sin(3.14)
Traceback (most recent call last):
  File
"", line 1, in
NameError: name
'sin' is not defined

 

여전히 에러가 발생한다. error내용을 읽어보니 not defined라는 문구가 보인다. 정의 되있지 않다는 것이다.

import로 불러온 모듈에 속한 함수를 쓰려면 모듈명.함수명 이렇게 써줘야 한다.

>>> math.sin(3.14)
0.0015926529164868282

 

math모듈 안에는 sin과 같은 함수만 있는 것이 아니라 상수도 정의 되어있다. 정밀한 π값을 쓰기 위해 math.pi를 쓰면 된다. 상수명에는 ()가 없고 함수를 불러올 때는 ()를 붙인다는 것을 기억하자. pi 값과 자연상수 e값을 구해보자.

>>> math.pi
3.141592653589793
>>> math.e
2.718281828459045

 

-        모듈에 포함된 함수 알아보기(dir)

            dir(모듈명)

모듈 안에 어떤 함수들이 들어 있을까? 알아 볼 수 있으면 좋지 않을까? dir함수를 이용하면 된다. sin, log, degrees, radians 함수 등이 보인다. e나 pi같이 함수가 아닌 상수도 있다는 걸 알 수 있다. degrees는 radian을 degree로 바꿔주는 함수고 radians는 degree를 radian으로 바꿔주는 함수다. 엔지니어들은 이 함수들을 많이 쓸 것이다.

>>> dir(math)
[
'__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']

 

-        모듈에 포함된 함수 사용법 알아보기(help)

         help(함수명)

위의 math모듈의 함수중에 dist함수가 있다. 아마도 좌표 두개를 주면 그 두 좌표사이의 거리를 구해줄 것 같다. 사용법을 알아보기 위해서 help(math.dist)를 쳐보자. 두 점은 sequence형태(list) 또는 iterables여야 한다는 도움말을 볼 수 있다. 계산이 어떻게 되는지도 설명되어있다.

>>> help(math.dist)
Help on built-
in function dist in module math:

dist(p, q, /)
    Return the Euclidean distance between two points p
and q.

    The points should be specified
as sequences (or iterables) of
    coordinates.  Both inputs must have the same dimension.

    Roughly equivalent to:
        sqrt(sum((px - qx) **
2.0 for px, qx in zip(p, q)))

 

math모듈의 dist함수를 테스트해보자. p [0,0,0]와 q의 [1,1,1]거리는 1.732으로 계산됐다.

>>> math.dist([0,0,0],[1,1,1])
1.7320508075688772

 

 

Built in module

math모듈처럼 별도의 설치 없이 import해서 쓸 수 있는 모듈을 built in module이라고 부른다. built in module에는 어떤 것들이 있을까? built in module의 목록을 보려면 sys모듈을 import한 후 sys.builtin_module_names라고 입력해보자. 목록이 나온다. math와 sys, time등을 볼 수 있다. 모듈들을 다 기억할 필요는 없다. 코딩하다가 필요한 함수나 기능을 구글링으로 찾아보면 된다.

-        built in module 목록 보기

sys.builtin_module_names

>>> import sys
>>> sys.builtin_module_names
(
'_abc', '_ast', <중간생략> , 'math', <중간생략> 'sys', 'time', <생략>)

 

Module 불러오는 방법

모듈을 불러오는 방법은 몇가지 있다. 아래의 예를 보자.

import math

from math import sin, cos, tan

from math import *

첫번째 방법은 지금까지 알아본 가장 일반적인 방법이다. 이렇게 불러 오면 모듈‘m.함수명()과 같은 방법으로 함수를 사용해야 한다. math.sin(1.0)이렇게 말이다.

두번째 방법은 from 키워드를 써서 module내에서 불러오고 싶은 함수나 상수이름만 써주는 것이다. from을 이용해서 import하면 모듈명 없이 sin(1.0)과 같이 사용할 수 있다.

세번째 방법(from math import *)은 math모듈 내의 모든 함수(상수)를 import하는 것이다. 두번째 방법과 마찬가지로 모듈명 지정 없이 sin(1.0)을 직접 쓸수 있다.

>>> from math import sin,cos,tan
>>> tan(1.0)
1.5574077246549023
>>> math.tan(1.0)
Traceback (most recent call last):
  File
"", line 1, in
NameError: name
'math' is not defined

 

위의 예를 보면 from을 이용해서 삼각함수 세개를 import했다. sin(1.0)는 제대로 작동하는데 math.sin(1.0)은 제대로 작동하지 않는다.  모듈명 없이 쓸 수 있는 두번째와 세번째 방법이 편할것 같은데 대부분 모듈명을 앞에다 써주는 첫번째 방법을 쓴다. 모듈명을 명확하게 하려는 것이다.  

[8-1]에 계속 



이석종
패키지는 [8-1]에서 계속됩니다. 2022-09-04
21:47:48

 


  추천하기   목록보기

Copyright 1999-2023 Zeroboard / skin by zero
구조설계의 미래를 준비하는 모임 [구조설계미래포럼]